验证规则的定义通常有两种方式,
第一种,可以通过\x\Validate()->rule()
方法临时修改验证规则,
第二种,自定义Validate
规则类,通过rule
属性定义验证规则。
提示:所有自定义的Validate
规则类,都需要继承\x\Validate
基类。
自定义规则类,官方建议,统一存放在/box/validate/
目录下:
namespace box\validate;
use x\Validate;
class User extends Validate
{
// 定义字段对应的规则
protected $rule = [
'id' => 'require|int',
'name' => 'require|username|between:1,120',
'age' => 'between:1,100',
'email' => 'email',
'info.nick' => 'alphaNum|min:10|max:20',
];
// 格式
// 字段 => 规则
}
这样就可以直接使用:
$ValiUser = new \box\validate\User();
// $data为验证数据集
if ($ValiUser->fails($data)) {
// 打印失败原因
var_dump($Validate->errors());
}
框架内置了一些常用的验证规则可以满足大部分的验证需求,具体每个规则的含义参考内置规则一节。
同时,框架还支持开发者自定义规则,具体自定义规则一节。
正常情况下,规则验证只要有一条不通过,就会终止继续验证,如果要全部规则都验证之后,才终止fails()
(不影响返回结果),
可以定义batch
属性:
namespace box\validate;
use x\Validate;
class User extends Validate
{
// 全部检测,默认 false
protected $batch = true;
// 定义字段对应的规则
protected $rule = [
'id' => 'require|int',
'name' => 'require|username|between:1,120',
'age' => 'between:1,100',
'email' => 'email',
'info.nick' => 'alphaNum|min:10|max:20',
];
}
还是一样的使用流程:
$ValiUser = new \box\validate\User();
// $data为验证数据集
if ($ValiUser->fails($data)) {
// 打印失败原因(可以看到全部的错误规则)
var_dump($Validate->errors());
}
校验器除了支持定义字段规则外,还支持统一注册请求校验,支持的规则可以再文档,内置规则中查看。
namespace box\validate;
use x\Validate;
class User extends Validate
{
// 定义请求对应的规则
protected $header_rule = [
'request' => 'get|ajax|jwt:get,token'
];
}
上面的案例是说明,只允许Get-Ajax
请求,并且校验Jwt
,jwt
的数据源从get请求中获取token
字段进行校验。
提示:$header_rule
会在表单校验之前先执行。同时对所有场景值生效,不支持单一场景注册。