thinkphp5.1+ 表单验证(验证器)自定义验证方法

TP5.1+  中的验证器,个人觉得就是 Laravel/Lumen 或是 CodeIgniter 中的表单验证.

1. 验证器

我们可以用以下指令快速生成验证器

php think make:validate dev/Test

thinkphp5.1+ 表单验证(验证器)自定义验证方法_第1张图片

 以下是我生成的 User 验证器示例

  -  <
     *       /       \
     *      //       \\
     *     //|   .   |\\
     *     "'\       /'"_.-~^`'-.
     *        \  _  /--'         `
     *      ___)( )(___
     *     (((__) (__)))    高山仰止,景行行止.虽不能至,心向往之.
     *
     */


    namespace app\dev\validate;


    use think\Db;
    use think\Validate;

    class User extends Validate {
        protected $rule = [
            'name' => 'require|max:25|checkName:用户名不能为123',
            'nickname' => 'require'
        ];

        protected $message = [
            'name.require' => '名称不能为空',
            'name.max' => '名称最少为25个字符',
            'nickname.require' => 'nickname不能为空'
        ];

        // 自定义验证规则
        protected function checkName($value,$rule,$data=[],$name,$description){
            if ($value == '123'){
                return $rule;
            }else{
                return true;
            }
        }

    }

以上的自定义验证规则中的 $value 是 name 的值,$rule 的值为 '用户名不能为123',具体可以参看文档 https://www.kancloud.cn/manual/thinkphp5_1/354102

使用示例:

在控制器有一个如下方法,

   public function curlAddUser(Request $request){

            $data = [
                'name' => $request->post('name'),
                'nickname' => $request->post('nickname')
            ];

            $validate = new \app\dev\validate\User();
            if (!$validate->check($data)){
                return ($validate->getError());
            }
            
        }

利用 postman 请求结果如下

thinkphp5.1+ 表单验证(验证器)自定义验证方法_第2张图片

 如果需要批量验证,可以加上 batch() 方法,改成如下示例

public function curlAddUser(Request $request){

            $data = [
                'name' => $request->post('name'),
                'nickname' => $request->post('nickname')
            ];

            $validate = new \app\dev\validate\User();
            if (!$validate->batch()->check($data)){
                dump($validate->getError());
            }

        }

thinkphp5.1+ 表单验证(验证器)自定义验证方法_第3张图片

2.  独立验证

我们在控制器中新加 curlAddUser2() 方法探索独立验证.可以使用 extend 方法动态注册验证规则

public function curlAddUser2(Request $request){

                $rule = [
                    'name'  => 'require|max:25|checkName:你不是公孙胜',
                    'nickname'   => 'require'
                ];

                $msg = [
                    'name.require' => '名称不能为空',
                    'name.max'     => '名称最多不能超过25个字符',
                    'nickname' => 'nickname 不能为空'
                ];

                Validate::extend('checkName',function ($value,$rule){
                        if ($value != '公孙胜'){
                            return $rule;
                        }else{
                            return true;
                        }
                });

                $data = [
                    'name' => 'xx公孙胜',
                    'nickname' => ''
                ];

                $validate = Validate::make($rule,$msg);
                $result = $validate->batch()->check($data);
                if (!$result){
                    dump($validate->getError());
                }
        }

示例结果

thinkphp5.1+ 表单验证(验证器)自定义验证方法_第4张图片

你可能感兴趣的:(thinkphp5.1+)