微信扫一扫打赏支持

后盾网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

 

 

 

 
posted @ 2019-09-12 20:44  范仁义  阅读(292)  评论(0编辑  收藏  举报