若是要验证的字段是 password
,输入中必须存在匹配的 password_confirmation
字段。php
验证的字段值必须与参数字段的值不一样。html
public function rules() { return [ //... 'password' => 'bail|required|string|between:8,20|confirmed|different:old_password', 'password_confirmation' => 'bail|required|string|between:8,20' //... ]; }
一般咱们的 tags
前端一般会写成这个样子:前端
<input name='tags[]' >
而后在后端能够经过多对多的关联来实现这个添加标签的功能,可是其实咱们仔细地想:咱们添加标签的时候但愿达到什么样的效果呢?我以为有下面两个最简单的:mysql
tags[]
是不能为空的。tags[]
不为空,里面的每个元素(标签)应该是惟一的。因此在验证的时候,咱们能够这样:sql
Validator::make($request->all(), [ "tags" => 'required|array', "tags.*" => 'required|string|distinct|min:3', ]);
这里须要解释一下,第一条后端
"tags" => 'required|array',
是代表这是一个不能为空的数组,而后第二条数组
"tags.*" => 'required|string|distinct|min:3',
就是说:tags
数组里面每一个元素我但愿是 string
,并且是惟一的 (distinct),每一个元素最小的长度为 3。less
第一次验证失败后中止运行验证规则。
只是中止这个字段的验证,其它字段不影响。ui
messages()
和 attributes()
继承于Illuminate\Foundation\Http\FormRequest
,能够重写验证字段的含义和提示信息。this
public function messages() { return [ 'password.confirmed' => '两次输入的密码不一致!', 'password.different' => '新密码与旧密码不能一致!' ]; }
检查通过身份验证的用户肯定其是否具备更新给定资源的权限。
若是 authorize()
方法返回 false
,则会自动返回一个包含 403
状态码的 HTTP 响应,也不会运行控制器的方法。
public function authorize() { return true; }
第一种写法:unique:(链接名)表名,表中对应字段,忽略值,表主键
public function rules() { return [ 'name' => 'required|string|unique:mysql.sometable,name', //... ]; }
第二种写法:使用Illuminate\Validation\Rule
中的unique()
静态方法
public function rules() { $id = $this->get('id'); return [ 'id' => 'required|integer', 'name' => [ 'required', 'string', Rule::unique('mysql.sometable')->ignore($id, 'id') ], //... ]; }
还有其余查询条件时,能够链式使用where()
等方法
public function rules() { $stationId = $this->get('station_id'); return [ //... 'car_number' => [ 'required', 'string', Rule::unique('queue')->where(function ($query) use ($stationId) { $query->where([ ['station_id', $stationId], ['cancel_state', 0]//未取消 ])->whereDate('create_time', today()->toDateString()); })//排队中不容许重复 ], //... ]; }
有许多规则,视实际状况使用:
举个例子
public function rules() { return [ 'tel' => 'required_without_all:mobile,email,address', 'mobile' => 'required_without_all:tel,email,address', 'email' => 'required_without_all:tel,mobile', 'address' => 'required_without_all:tel,mobile', ]; } public function messages() { return [ 'tel.required_without_all' => '当手机号码、Email、地址都为空时,电话号码不能为空', 'mobile.required_without_all' => '当电话号码、Email、地址都为空时,手机号码不能为空', 'email.required_without_all' => '当电话号码、手机号码都为空时,Email和地址不能同时为空', 'address.required_without_all' => '当电话号码、手机号码都为空时,Email和地址不能同时为空' ]; }