后盾网lavarel视频项目---自定义验证和自定义验证规则
后盾网lavarel视频项目---自定义验证和自定义验证规则
一、总结
一句话总结:
1、自定义验证就是用的自定义验证请求类:php artisan make:request AdminPost
2、自定义验证规则就是Validator的extend方法:Validator::extend('check_password', function ($attribute, $value, $parameters, $validator) {
1、如何创建请求验证?
php artisan make:request AdminPost
app/Http/Requests/AdminPost.php会被创建
2、控制器中如何使用自定义的验证类?
使用对应的请求实例即可:public function changePassword(AdminPost $request){
3、自定义请求验证类中如何自定义验证规则?
Validator的extend方法:Validator::extend('check_password', function ($attribute, $value, $parameters, $validator) {
/** * 添加验证规则 */ public function addValidator(){ //验证用户密码 Validator::extend('check_password', function ($attribute, $value, $parameters, $validator) { return Hash::check($value,Auth::guard('admin')->user()->password); }); }
4、自定义请求验证类中如何自定义验证错误的返回消息?
直接写一个message函数即可:应该是覆写了父类的 message函数
/** * 中文提示 * @return array */ public function messages() { return [ 'original_password.required'=>'原密码不能为空', 'password.required'=>'密码不能为空', 'password_confirmation.required'=>'确认密码不能为空', 'password.confirmed'=>'两次密码不一致', 'original_password.check_password'=>'原密码不正确', ]; }
5、修改密码时候比较原密码是否正确的逻辑怎么写?
获取用户密码了用户填写的原密码比较简单,然后用Hash服务的check方法即可:return Hash::check($value,Auth::guard('admin')->user()->password);
public function addValidator(){ //验证用户密码 Validator::extend('check_password', function ($attribute, $value, $parameters, $validator) { return Hash::check($value,Auth::guard('admin')->user()->password); }); }
二、自定义验证
示例:
1、创建请求验证
php artisan make:request AdminPost
app/Http/Requests/AdminPost.php会被创建
2、完善请求验证类:app/Http/Requests/AdminPost.php
1 <?php 2 3 namespace App\Http\Requests; 4 5 use Illuminate\Foundation\Http\FormRequest; 6 use Auth; 7 use Validator; 8 use Hash; 9 10 class AdminPost extends FormRequest 11 { 12 /** 13 * Determine if the user is authorized to make this request. 14 * 15 * @return bool 16 */ 17 public function authorize() 18 { 19 return Auth::guard('admin')->check(); 20 //return false; 21 } 22 23 /** 24 * 添加验证规则 25 */ 26 public function addValidator(){ 27 //验证用户密码 28 Validator::extend('check_password', function ($attribute, $value, $parameters, $validator) { 29 return Hash::check($value,Auth::guard('admin')->user()->password); 30 }); 31 } 32 33 /** 34 * Get the validation rules that apply to the request. 35 * 36 * @return array 37 */ 38 public function rules() 39 { 40 $this->addValidator(); 41 return [ 42 'original_password'=>'sometimes|required|check_password', 43 'password'=>'sometimes|required|confirmed', 44 'password_confirmation'=>'sometimes|required', 45 ]; 46 } 47 48 /** 49 * 中文提示 50 * @return array 51 */ 52 public function messages() 53 { 54 return [ 55 'original_password.required'=>'原密码不能为空', 56 'password.required'=>'密码不能为空', 57 'password_confirmation.required'=>'确认密码不能为空', 58 'password.confirmed'=>'两次密码不一致', 59 'original_password.check_password'=>'原密码不正确', 60 ]; 61 } 62 }
26-31行:是验证用户修改密码的时候原密码时候正确的验证规则,是自定义的验证规则,在第42行有使用
52-61行:验证的信息提示
第40行:将自定义的信息规则使用起来
第19行:验证用户是否登录
第8行:用Hash服务来比较密码
第29行:$value就是表单提交上来的字段,也就是比较的字段,在这里是original_password
第28行:这里的'check_password'就是这个 自定义验证的名字
3、控制器 :app/Http/Controllers/Admin/MyController.php
1 <?php 2 3 namespace App\Http\Controllers\Admin; 4 5 use App\Http\Requests\AdminPost; 6 use Illuminate\Http\Request; 7 use App\Http\Controllers\Controller; 8 use Auth; 9 10 class MyController extends Controller 11 { 12 //修改密码的界面 13 public function changePasswordForm(){ 14 return view('admin.my.change_pass'); 15 } 16 17 //修改密码 18 public function changePassword(AdminPost $request){ 19 $model=Auth::guard('admin')->user(); 20 $model->password=bcrypt($request['password']); 21 $model->save(); 22 } 23 }
验证是自动验证,所以控制器中每验证什么事,也就是需要用到验证实例,第18行,AdminPost $request