- 使用的是
\think\Validate
类 - 可以在两个地方定义(控制器和模型)
控制器操作:
文件
\think\Validate.php
的构造函数
/**
* 架构函数
* @access public
* @param array $rules 验证规则
* @param array $message 验证提示信息
* @param array $field 验证字段描述信息
*/
//三个参数都允许为空
public function __construct(array $rules = [], array $message = [], array $field = [])
{
$this->rule = array_merge($this->rule, $rules);
$this->message = array_merge($this->message, $message);
$this->field = array_merge($this->field, $field);
}
使用案例:
//定义验证规则
$rule = [
'name' => 'require|max:25',
'age' => 'number|between:1,120',
'email' => 'email',
];
//定义验证提示信息
$msg = [
'name.require' => '名称必须',
'name.max' => '名称最多不能超过25个字符',
'age.number' => '年龄必须是数字',
'age.between' => '年龄只能在1-120之间',
'email' => '邮箱格式错误',
];
//定义验证字段描述信息
$field = [
'name' => '名称',
'age' => '年龄',
'email' => '邮箱',
];
//定义要验证信息
$data = [
'name' => 'thinkphp',
'age' => 10,
'email' => 'thinkphp@qq.com',
];
//实例化对象和验证数据
$validate = new Validate($rule,$msg,$field);
//定义场景(该场景定义只需要验证name和age字段),然后再需要验证的地方直接使用 scene 方法验证
$validate->scene('edit', ['name', 'age']);
$result = $validate->scene('edit')->check($data)
模型操作:
namespace app\index\validate;
use think\Validate;
class User extends Validate
{
定义验证规则
protected $rule = [
'name' => 'require|max:25',
'email' => 'email',
];
//定义字段描述信息
protected $field = [
'name' => '名称',
'email' => '邮箱'
];
//定义错误提示信息
protected $message = [
'name.require' => '用户名必须',
'email' => '邮箱格式错误',
];
//定义场景
protected $scene = [
'add' => ['name','email'],
'edit' => ['email'],
];
}
模型中调用:
$User = new User;
// 调用Member验证器类进行数据验证
$result = $User->validate('User.edit')->save($data);
if(false === $result){
// 验证失败 输出错误信息
dump($User->getError());
}
用内置的规则验证单个数据:
// 日期格式验证
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
表单验证:
表单中的添加:
<input type="hidden" name="__token__" value="{$Request.token}" />
验证规则中添加token:
protected $rule = [
'name' => 'require|max:25|token',//添加token验证
'email' => 'email',
];