对前端或表单请求的数据,一定要做校验,而使用ThinkPHP 验证器则可以事半功倍。
可以使用validate助手函数(或者封装验证方法)进行验证。TP版本6.1。
目录
验证场景
验证器
创建验证器
定义规则和提示
数据验证
独立验证:
加载规则
定义错误提示
数据验证
总结:
验证场景
系统内置了一些常用的验证规则,可以完成大部分场景的验证需求,包括:
- 格式验证类
- 长度和区间验证类
- 字段比较类
- filter验证
- 正则验证
- 上传验证
- 其它验证
验证器
我们定义一个\app\validate\User验证器类用于User的验证。
快速生成验证器
命令如下:
php think make:validate User
创建验证器
$ php think make:validate User
Validate:app\validate\User created successfully.
在app下创建了validate文件夹和User.php文件
文件内容如下:
<?php
declare (strict_types = 1);
namespace app\validate;
use think\Validate;
class User extends Validate
{
/**
* 定义验证规则
* 格式:'字段名' => ['规则1','规则2'...]
*
* @var array
*/
protected $rule = [];
/**
* 定义错误信息
* 格式:'字段名.规则名' => '错误信息'
*
* @var array
*/
protected $message = [];
}
定义规则和提示
/**
* 定义验证规则
* 格式:'字段名' => ['规则1','规则2'...]
*
* @var array
*/
protected $rule = [
'phone' => 'require|between:11,12',
'pwd' => 'require|max:10'
];
/**
* 定义错误信息
* 格式:'字段名.规则名' => '错误信息'
*
* @var array
*/
protected $message = [
'phone.require' => '请输入手机号!',
'phone.between' => '联系电话为11-12位!',
'pwd.require' => '请输入密码!',
'pwd.max' => '密码最多输入10位',
];
数据验证
try {
validate(User::class)->check($data);
} catch (\think\exception\ValidateException $e) {
echo $e->getError();die;
}
这一步为什么用try...catch..,因为不用的话,错误会抛出异常。
独立验证
加载规则
使用门面Validate,调用rule加载规则:
$rules = [
'phone' => 'require|between:11,12',
'pwd' => 'require|max:10'
];
$validate = \think\facade\Validate::rule($rules);
定义错误提示
使用message方法加载自定义错误提示
$messages = [
'phone.require' => '请输入手机号!',
'phone.between' => '联系电话为11-12位!',
'pwd.require' => '请输入密码!',
'pwd.max' => '密码最多输入10位',
];
$validate = \think\facade\Validate::rule($rules)->message($messages);
数据验证
if(!$validate->check($data)) {
echo $validate->getError();
}
总结:
验证器需要创建单独的类文件,在其中定义验证规则和错误信息提示;
独立验证不需要创建类文件,可直接调用,但也需要定义规则和错误信息提示。
这两种都可以使用,可以根据业务需求,按需使用!