ThinkPHP5.1 验证器

ThinkPHP5.1推荐使用验证器进行数据验证(也支持使用\think\Validate类进行独立验证)。

验证器定义
为具体的验证场景或者数据表定义好验证器类,直接调用验证类的check方法即可完成验证,下面是一个例子:

我们定义一个\app\index\validate\User验证器类用于User的验证。

namespace app\index\validate;

use think\Validate;

class User extends Validate
{
    protected $rule = [
        'name'  =>  'require|max:25',
        'email' =>  'email',
    ];

}


V5.1.15+版本开始,可以使用下面的指令快速生成User验证器。

php think make:validate index/User


可以直接在验证器类中使用message属性定义错误提示信息,例如:

namespace app\index\validate;

use think\Validate;

class User extends Validate
{
    protected $rule =   [
        'name'  => 'require|max:25',
        'age'   => 'number|between:1,120',
        'email' => 'email',    
    ];
    
    protected $message  =   [
        'name.require' => '名称必须',
        'name.max'     => '名称最多不能超过25个字符',
        'age.number'   => '年龄必须是数字',
        'age.between'  => '年龄只能在1-120之间',
        'email'        => '邮箱格式错误',    
    ];
    
}


如果没有定义错误提示信息,则使用系统默认的提示信息

数据验证
在需要进行User验证的控制器方法中,添加如下代码即可:

namespace app\index\controller;

use think\Controller;

class Index extends Controller
{
    public function index()
    {
        $data = [
            'name'  => 'thinkphp',
            'email' => 'thinkphp@qq.com',
        ];

        $validate = new \app\index\validate\User;

        if (!$validate->check($data)) {
            dump($validate->getError());
        }
    }
}


事实上控制器类提供了一个validate方法可以更方便的进行验证,如下:

namespace app\index\controller;

use think\Controller;

class Index extends Controller
{
    public function index()
    {
        $result = $this->validate(
            [
                'name'  => 'thinkphp',
                'email' => 'thinkphp@qq.com',
            ],
            'app\index\validate\User');

        if (true !== $result) {
            // 验证失败 输出错误信息
            dump($result);
        }
    }
}


批量验证
默认情况下,一旦有某个数据的验证规则不符合,就会停止后续数据及规则的验证,如果希望批量进行验证,可以设置:

namespace app\index\controller;

use think\Controller;

class Index extends Controller
{
    // 是否批量验证
    protected $batchValidate = true;

    public function index()
    {
        $result = $this->validate(
            [
                'name'  => 'thinkphp',
                'email' => 'thinkphp@qq.com',
            ],
            'app\index\validate\User');

        if (true !== $result) {
            // 验证失败 输出错误信息
            dump($result);
        }
    }
}


在非控制器的地方如果需要执行批量验证,可以在验证的时候添加是否批量的方法batch()

namespace app\common\service;

use app\common\validate\User as UserValidate;

class Test
{
    public function validateTest($data)
    {
        $validata = new UserValidate;
        $result   = $validate->batch()->check($data);
        if ($result !== true) {
            dump($result);
        }
    }
}


批量验证如果验证不通过,返回的是一个错误信息的数组。

抛出验证异常
默认情况下验证失败后不会抛出异常,如果希望验证失败自动抛出异常,可以在控制器类中添加设置:

namespace app\index\controller;

use think\Controller;

class Index extends Controller
{
    // 验证失败是否抛出异常
    protected $failException = true;

    public function index()
    {
        $result = $this->validate(
            [
                'name'  => 'thinkphp',
                'email' => 'thinkphp@qq.com',
            ],
            'app\index\validate\User');
    }
}


设置开启了验证失败后抛出异常的话,无需手动获取错误信息,会自动抛出think\exception\ValidateException异常或者自己捕获处理。

自定义验证规则
系统内置了一些常用的规则(参考后面的内置规则),如果不能满足需求,可以在验证器重添加额外的验证方法,例如:

namespace app\index\validate;

use think\Validate;

class User extends Validate
{
    protected $rule = [
        'name'  =>  'checkName:thinkphp',
        'email' =>  'email',
    ];
    
    protected $message = [
        'name'  =>  '用户名必须',
        'email' =>  '邮箱格式错误',
    ];
    
    // 自定义验证规则
    protected function checkName($value,$rule,$data=[])
    {
        return $rule == $value ? true : '名称错误';
    }

}
验证方法可以传入的参数共有5个(后面三个根据情况选用),依次为:

相关推荐

  1. ThinkPHP5.1 验证

    2024-05-10 13:24:01       33 阅读
  2. thinkphp8结合layui2.9 图片上传验证

    2024-05-10 13:24:01       24 阅读
  3. Matlab: 输入解析验证函数

    2024-05-10 13:24:01       53 阅读
  4. .net使用谷歌身份验证

    2024-05-10 13:24:01       39 阅读
  5. 商城数据库(51 52 53 54 55 56 57 58 59 60)

    2024-05-10 13:24:01       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-10 13:24:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-10 13:24:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-10 13:24:01       82 阅读
  4. Python语言-面向对象

    2024-05-10 13:24:01       91 阅读

热门阅读

  1. 双色球案例【C#】

    2024-05-10 13:24:01       32 阅读
  2. 什么是MTC证书?清关为什么要提交MTC?

    2024-05-10 13:24:01       32 阅读
  3. el-table vxe-table 表格宽度拖拽

    2024-05-10 13:24:01       31 阅读
  4. 高频SQL 确认率

    2024-05-10 13:24:01       36 阅读
  5. 攻击简写及全名

    2024-05-10 13:24:01       34 阅读