初步使用了一下Validator,感觉很强大,也很方便,梳理一下流程。
我个人习惯把验证写在模型里面,这样控制器看起来更简洁,当然写在控制器也可以,写在中间件也行。也可以用Laravel自带的创建Validator表单请求验证类。
分别记录一下在模型和创建表单请求两种Validator实现方法,不建议写在控制器,控制器应该保持简洁。
一:第一种使用方法,模型中使用Validator:
1:建立一个模型,加入4个方法
//验证规则 protected $role = [ 'passwordOld' => 'required|min:6|max:12', 'passwordNew' => 'required|min:6|max:12|confirmed', 'passwordNew_confirmation' => 'required|min:6|max:12', ]; //这三个字段为提交表单的input //提示信息 attribute是占位符,这里是custom方法的value protected $msgs = [ 'required' => ':attribute不能为空', 'min' => ':attribute最少:min字符', 'max' => ':attribute最长:max字符' 'confirmed' => ':attribute输入不一致' ]; // 自定义字段名称,提示的时候用到 protected $custom = [ 'passwordOld' => '原密码', 'passwordNew' => '新密码', 'passwordNew_confirmation' => '密码确认', ]; //设置密码 $input提交过来的表单和数据 public function setPassword($input) { $validator = \Validator::make($input,$this->role,$this->msgs,$this->custom); if($validator->fails()){//验证字段失败,失败信息自己封装处理 $validator->errors()->first(); //返回第一个错误消息,一般用这个就行了 //$validator->errors()->all(); //返回全部错误消息,不带表单下标 //$validator->errors(); //返回全部错误消息,带表单下标 } }
小提示:confirmed参数是判断两个字段是否一致。后一个字段必须带confirmation;比如这里密码字段是:passwordNew,那么确认密码字段就是:passwordNew_confirmation。
'passwordNew' => 'required|min:6|max:12|confirmed', 'passwordNew_confirmation' => 'required|min:6|max:12',
相应的表单里面就是:
input type="password" name="passwordNew_confirmation"
这样Laravel才能正确判断两个字段输入是否一致。
还有个神奇的功能:
'passwordOld' => 'required|min:6|max:12|exists:admin,password,id,4',这里的 exists:admin,password,id,4 会匹配数据库,这段换成SQL语句:
select count(*) as aggregate from `js_admin` where `passsword` = 密码 and `id` = 4
2:控制器调用:
public function password(request $re) { $input = $re->except('_token');//接受POST表单过来的数据,除开_token $set = new Admin; //我这里的模型是Admin $set->setPassword($input); //验证 }
二:第二种使用方法,创建Validator表单请求,Laravel推荐的方式