验证器分为独立验证和验证器
验证器:
验证器定义: 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);
}
}