1. 程式人生 > >thinkphp5.1+ 表單驗證(驗證器)自定義驗證方法

thinkphp5.1+ 表單驗證(驗證器)自定義驗證方法

TP5.1+  中的驗證器,個人覺得就是 Laravel/Lumen 或是 CodeIgniter 中的表單驗證.

1. 驗證器

我們可以用以下指令快速生成驗證器

php think make:validate dev/Test

 以下是我生成的 User 驗證器示例

<?php
    /**
     * Created by PhpStorm.
     * User: nwei
     * Date: 2018/10/16
     * Time: 15:25
     *
     *    .--,       .--,
     *   ( (  \.---./  ) )
     *    '.__/o   o\__.'
     *       {=  ^  =}
     *        >  -  <
     *       /       \
     *      //       \\
     *     //|   .   |\\
     *     "'\       /'"_.-~^`'-.
     *        \  _  /--'         `
     *      ___)( )(___
     *     (((__) (__)))    高山仰止,景行行止.雖不能至,心嚮往之.
     *
     */


    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;
            }
        }

    }

使用示例:

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

   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 請求結果如下

 如果需要批量驗證,可以加上 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());
            }

        }

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());
                }
        }

示例結果