验证场景

版本新增功能
5.0.4增加hasScene方法用于检查是否存在验证场景

可以在定义验证规则的时候定义场景,并且验证不同场景的数据,例如:

$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'        => '邮箱格式错误',
];
$data = [    'name'  => 'thinkphp',    'age'   => 10,    'email' => 'thinkphp@qq.com',
];
$validate = new Validate($rule);
$validate->scene('edit', ['name', 'age']);
$result = $validate->scene('edit')->check($data);

表示验证edit场景(该场景定义只需要验证name和age字段)。

如果使用了验证器,可以直接在类里面定义场景,例如:

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'],
    ];
    
}

然后再需要验证的地方直接使用 scene 方法验证

$data = [    'name'  => 'thinkphp',    'age'   => 10,    'email' => 'thinkphp@qq.com',
];

$validate = new \app\index\validate\User($rule);
$result = $validate->scene('edit')->check($data);

可以在定义场景的时候对某些字段的规则重新设置,例如:

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'=>'require|number|between:1,120'],
    ];
    
}

可以对场景设置一个回调方法,用于动态设置要验证的字段,例如:

$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'        => '邮箱格式错误',
];
$data = [    'name'  => 'thinkphp',    'age'   => 10,    'email' => 'thinkphp@qq.com',
];
$validate = new Validate($rule);
$validate->scene('edit', function($key,$data){    return 'email'==$key && isset($data['id'])? true : false;
});
$result = $validate->scene('edit')->check($data);


 小秋同学  验证  2021-03-24 08:33:10    收藏:  赞(866)
源码网-一个不错的学习网站
本文地址:https://www.yuanma.cc/article/yanzheng/1502.html 复制链接 如果还有疑问,欢迎加入我们的QQ交流群:887790 加入Q群 易优最新程序下载: 点击下载
QQ在线咨询