验证场景仅针对自定义规则验证器有效,独立验证不存在验证场景的概念
验证器支持定义场景,并且验证不同场景的数据,主要配合\x\Validate()->scene()
方法选择对应场景使用。
自定义Validate
规则类,通过scene
属性定义场景列表。
提示:所有自定义的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',
];
// 自定义错误值声明
protected $message = [
'id.require' => '{id}忘记输入啦',
'name.username' => '{name}不规范',
'info.nick.min' => '{:preset}不能小于{0}',
];
// 场景定义
protected $scene = [
// 修改时使用的场景(简写)
'edit' => ['id','name','age','email','info.nick'], // 需要校验的字段
// 新增时使用的场景(精致)
'create' => [
'field' => ['name','age','email','info.nick'], // 需要校验的字段
'filter' => ['email'], // 移除校验的字段
'add_rule' => [ // 追加校验规则
'age' => 'require|number',
],
'delete_rule' => [ // 删除校验规则
'name' => 'require|between',
],
],
];
}
然后就可以在验证方法中制定验证的场景:
$ValiUser = new \box\validate\User();
// $data为验证数据集
if ($ValiUser->scene('edit')->fails($data)) {
// 打印失败原因
var_dump($Validate->errors());
}
注意:场景(简写)的情况下,只用于声明,需要使用的字段规则。正常情况下,建议使用场景(精致)的写法。