验证场景
验证场景
版本 | 新增功能 |
---|---|
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 appindexvalidate;
use thinkValidate;
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 appindexvalidateUser($rule);
$result = $validate->scene("edit")->check($data);
可以在定义场景的时候对某些字段的规则重新设置,例如:
namespace appindexvalidate;
use thinkValidate;
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);