常见被前端验证的表单数据有:
- 用户是否已填写表单中的必填项目?
- 用户输入的邮件地址是否合法?
- 用户是否已输入合法的日期?
- 用户是否在数据域(numeric field) 中输入了文本?
Laravel 提供了几种不同的方法来验证传入应用程序的数据

表单验证
最常见的做法是在所有传入的 HTTP 请求中使用 validate 方法
1 | /** |
密码
1 | return [ |
- Confirmed
如果要验证的字段是password,输入中必须存在匹配的password_confirmation字段 - Different
验证的字段值必须与参数字段的值不同 - Bail
第一次验证失败后停止运行验证规则。只是停止这个字段的验证,其它字段不影响
数组
当获取前端传递的数组内容时,一般有如下要求:
- 数组不能为空
- 里面的每一个元素是唯一的
所以可以用下面的验证方法:
1 | Validator::make($request->all(), [ |
tags 数组里面每个元素都是字符串,而且是唯一的,每个元素最小长度为 3
Authorize
检查经过身份验证的用户确定其是否具有更新给定资源的权限
如果 authorize() 方法返回 false,则会返回出一个 403 的 HTTP 响应
1 | public function authorize() |
Unique
第一种写法:unique:(连接名)表名,表中对应字段,忽略值,表主键
- 当字段名和表中字段相等时可省略
- 忽略值一般用于修改判断时去掉自己
- 表主键为 id 时可省略
1 | return [ |
第二种写法:使用 Illuminate\Validation\Rule::unique() 静态方法
1 | $id = $this->get('id'); |
还有其他查询条件时,可以链式使用 where() 等方法
1 | $stationId = $this->get('station_id'); |
自定义验证规则
1 | php artisan make:rule CheckPhoneNumber |
规则对象包括 passes() 和 message() 方法
passes 方法接收属性值和名称,并根据属性值是否符合规则而返回 true 或者 false:
1 | public function passes($attribute, $value) |
创建表单请求类并使用新规则
1 | php artisan make:request Auth\LoginRequest |
1 | return [ |
国际化与本地化
i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称
在资讯领域,国际化(i18n)指让产品(出版物,软件,硬件等)无需做大的改变就能够适应不同的语言和地区的需要。对程序来说,在不修改内部代码的情况下,能根据不同语言及地区显示相应的界面
对应的有 l10n(localization 的缩写形式,意即在 l 和 n 之间有 10 个字母),指软件的“本地化”
config/app.php 中的区域(语言)设置:
1 | 'locale' => 'zh-CN', |
可以使用 App Facade 的 setLocale() 方法动态地更改当前语言:
1 | Route::get('welcome/{locale}', function ($locale) { |
还有 getLocale() 及 isLocale() 方法确定当前的区域设置或者检查语言环境是否为给定值
例如Element文档:
- http://element-cn.eleme.io/#/zh-CN
- http://element-cn.eleme.io/#/en-US
- http://element-cn.eleme.io/#/es/
zh 为中文大类,其中还分为许多小类:
- zh-CN 简体中文,中华人民共和国
- zh-HK 繁体中文,香港特别行政区
- zh-MO 繁体中文,澳门特别行政区
- zh-SG 简体中文,新加坡
- zh-TW 繁体中文,中国台湾
resources/lang/zh-CN/validation.php 设置语言后会翻译表单验证的规则、标签等
在应用中还可以使用 __()、trans()、trans_choice() 辅助方法来翻译