独立验证

最后更新于:2022-04-02 01:54:17

## 创建验证 任何时候,都可以直接使用`think\Validate`类而不需要定义验证器类进行独立的验证操作,例如: ~~~ $validate = Validate::make([ 'name' => 'require|max:25', 'email' => 'email' ]); $data = [ 'name' => 'thinkphp', 'email' => 'thinkphp@qq.com' ]; if (!$validate->check($data)) { dump($validate->getError()); } ~~~ `make`方法直接传入验证规则(数组),`check`方法传入需要验证的数据(数组)。 ## 设置规则 也可以使用`rule`方法设置单个或者批量验证规则,例如: ~~~php Validate::make() ->rule('zip', '/^\d{6}$/') ->rule('email', 'email') ->check($data); ~~~ 支持数组方式 ~~~ Validate::make() ->rule(['zip' => '/^\d{6}$/', 'email' => 'email']) ->check($data); ~~~ 验证规则可以使用`think\validate\ValidateRule`对象定义 ~~~php Validate::make() ->rule('zip', ValidateRule::regex('/^\d{6}$/')) ->rule('email', ValidateRule::must()->isEmail()) ->check($data); ~~~ >[info] `ValidateRule`类可以静态化调用所有的内置验证方法(支持二个参数:验证规则和错误信息) 下面是指定错误信息及验证字段的名称示例: ~~~php Validate::make() ->rule('zip', ValidateRule::regex('/^\d{6}$/', '邮编错误')) ->rule('email', ValidateRule::must()->isEmail()->title('邮箱')) ->rule('name', ValidateRule::min(5, '最少5个字符')->max(20, '不得超过20个字符')) ->check($data); ~~~ 同样在数组方式中也支持: ~~~ Validate::make() ->rule([ 'zip' => ValidateRule::regex('/^\d{6}$/'), 'email' => ValidateRule::email(), ]) ->check($data); ~~~ ## 验证数据 下面是一个典型的验证数据的例子: ~~~ $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 = Validate::make($rule,$msg); $result = $validate->check($data); if(!$result) { dump($validate->getError()); } ~~~ 如果需要批量验证,可以使用: ~~~ $result = Validate::make($rule,$msg) ->batch() ->check($data); ~~~ >[danger] 批量验证如果验证不通过,返回的是一个错误信息的数组。 ## 闭包验证 可以对某个字段使用闭包验证,例如: ~~~ $validate = Validate::make([ 'name' => function($value,$rule) { return $rule==$value ? true : false; }, ])->check($data); ~~~ ## 自定义验证规则 独立验证的时候支持使用`extend`方法动态注册验证规则,例如: ~~~ Validate::extend('checkName', function ($value, $rule) { return $rule == $value ? true : '名称错误'; }); $validate = Validate::make(['name' => 'checkName:1']); $data = ['name' => 1]; $validate->check($data); ~~~ 支持批量注册验证规则,例如: ~~~ Validate::extend([ 'checkName'=> function ($value, $rule) { return $rule == $value ? true : '名称错误'; }, 'checkStatus'=> [$this,'checkStatus'] ]); $validate = Validate::make(['name' => 'checkName:1']) $data = ['name' => 1]; $validate->check($data); ~~~ ## 设置字段信息 验证类的架构方法支持传入`field`参数批量设置字段的描述信息,例如: ~~~ $rule = [ 'name' => 'require|max:25', 'age' => 'number|between:1,120', 'email' => 'email', ]; $field = [ 'name' => '名称', 'age' => '年龄', 'email' => '邮箱', ]; $data = [ 'name' => 'thinkphp', 'age' => 10, 'email' => 'thinkphp@qq.com', ]; $validate = Validate::make($rule, [], $field); $result = $validate->check($data); ~~~ ## 错误提示信息 如果要使用自定义的错误信息,可以使用`message`方法: ~~~ $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' => 121, 'email' => 'thinkphp@qq.com', ]; $validate = Validate::make($rule)->message($msg); $result = $validate->check($data); if(!$result){ echo $validate->getError(); } ~~~ 会输出 `年龄必须在1~120之间`。 如果需要使用多语言验证信息,可以在定义验证信息的时候使用 **{%语言变量}** 替代 原来的验证错误信息,例如: ~~~ $rule = [ 'name' => 'require|max:25', 'age' => 'number|between:1,120', 'email' => 'email', ]; $msg = [ 'name.require' => '{%name_require}', 'name.max' => '{%name_max}', 'age.number' => '{%age_number}', 'age.between' => '{%age_between}', 'email' => '{%email_error}', ]; $data = [ 'name' => 'thinkphp', 'age' => 121, 'email' => 'thinkphp@qq.com', ]; $validate = Validate::make($rule)->message($msg); $result = $validate->check($data); if(!$result){ echo $validate->getError(); } ~~~
';