thinkphp验证器

验证器分为独立验证和验证器

独立验证:https://www.kancloud.cn/manual/thinkphp5/129352

验证器:

验证器定义: app/index/validate/User.php

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'        => '邮箱格式错误',    
];

    protected $scene = [
        'edit'  =>  ['name','age'],
    ];
}

在控制器中使用和验证场景

$result = $this->validate($data,'User.edit');
if(true !== $result){
    // 验证失败 输出错误信息
    dump($result);
}

### 在模型中使用:

如果当前模型就是当前验证器则:
$User = new User;
// 调用当前模型对应的User验证器类进行数据验证
$result = $User->validate(true)->save($data);
if(false === $result){
    // 验证失败 输出错误信息
    dump($User->getError());
}

如果需要调用的验证器类和当前的模型名称不一致,则可以使用:
$User = new User;
// 调用Member验证器类进行数据验证
$result = $User->validate('Member')->save($data);
if(false === $result){
    // 验证失败 输出错误信息
    dump($User->getError());
}

主要区别在于validate()方法中的参数




### 模型中增加场景验证

$User = new User;

$result = $User->validate('User.edit')->save($data);
if(false === $result){
    // 验证失败 输出错误信息
    dump($User->getError());
}
	
### 内置规则:

https://www.kancloud.cn/manual/thinkphp5/129356

使用内置的规则验证单个数据,可以使用静态调用的方式。
// 日期格式验证
Validate::dateFormat('2016-03-09','Y-m-d'); // true
// 验证是否有效的日期
Validate::is('2016-06-03','date'); // true
// 验证是否有效邮箱地址
Validate::is('thinkphp@qq.com','email'); // true
// 验证是否在某个范围
Validate::in('a',['a','b','c']); // true
// 验证是否大于某个值
Validate::gt(10,8); // true
// 正则验证
Validate::regex(100,'\d+'); // true
来自 <https://www.kancloud.cn/manual/thinkphp5/162814> 
### 自定义验证规则
<?php
	namespace app\index\validate;
	use think\Validate;
	class User extends Validate
	{
        // 验证规则
        protected $rule = [
            ['nickname', 'require|min:5', '昵称必须|昵称不能短于5个字符'],
            ['email', 'checkMail:thinkphp.cn', '邮箱格式错误'],
            ['birthday', 'dateFormat:Y-m-d', '生日格式错误'],
        ];
        // 验证邮箱格式 是否符合指定的域名
        protected function checkMail($value, $rule)
        {
        	return 1 === preg_match('/^\w+([-+.]\w+)*@' . $rule . '$/', $value);
        }
}
posted @ 2020-08-04 12:02  琴似蓝调  阅读(410)  评论(0编辑  收藏  举报