TP6中验证器的使用
TP6中验证器的使用
一、定义验证器
方式1:在目录app目录下,生成 validate目录,然后创建相应的验证器。
方式2:通过命令行工具执行命令: php think make:validate User
刚生成的验证器,代码如下:
<?php declare (strict_types = 1); namespace app\validate; use think\Validate; class User extends Validate { /** * 定义验证规则 * 格式:'字段名' => ['规则1','规则2'...] * * @var array */ protected $rule = [ ]; /** * 定义错误信息 * 格式:'字段名.规则名' => '错误信息' * * @var array */ protected $message = [ ]; }
二、简单验证示例:
HTML代码:
<form action="/index.php/test_validate/Validate1Act" method="post"> <p>账户名: <input type="text" name="user_name" /> </p> <p>手机号: <input type="text" name="user_mobile" /> </p> <p>姓 名: <input type="text" name="user_truename" /> </p> <p>身份证: <input type="text" name="user_idcard" /> </p> <p><input type="submit" value="提交"></p> </form>
验证器代码:app/validate/User.php
<?php declare (strict_types = 1); namespace app\validate; use think\Validate; class User extends Validate { /** * 定义验证规则 * 格式:'字段名' => ['规则1','规则2'...] * * @var array */ protected $rule = [ 'user_name' => 'require|length:6,20', 'user_mobile' => 'mobile', 'user_truename' => 'chs', 'user_idcard' => 'idCard' ]; /** * 定义错误信息 * 格式:'字段名.规则名' => '错误信息' * * @var array */ protected $message = [ 'user_name.require' => '账号不能为空', 'user_name.length' => '账号长度需在6-20个字符之间', 'user_mobile' => '手机号格式不正确', 'user_truename' => '姓名必须为中文', 'user_idcard' => '身份证号格式不正确' ]; }
控制器代码:
/** * 显示表单模板 */ public function validate1() { return view("test/validate1"); } /** * 验证 */ public function Validate1Act() { $data = request()->param(); try { $res = validate(User::class)->check($data); return "验证通过了"; } catch (ValidateException $e) { return "验证失败:".$e->getError(); } }
三、批量验证
批量验证就是,一次把所有的错误以数组的形式返回到控制器。
批量验证,是需要增加 batch(true)的规则
代码如下:
/** * 验证 */ public function Validate1Act() { $data = request()->param(); try { $res = validate(User::class)->batch(true)->check($data); return "验证通过了"; } catch (ValidateException $e) { $msgs = $e->getError(); $msgs_str = implode(",",$msgs); return "验证失败:".$msgs_str; } }
四:自定义验证
注意:
1、自定义规则不能和内置规则重复
2、自定义规则中参数
protected $rule = [ 'user_name' => 'require|length:6,20|checkName', ]; protected $message = [ 'user_name.require' => '账号不能为空', 'user_name.length' => '账号长度需在6-20个字符之间', ]; /** * 自定义验证规则 * $value 表示输入的值 * $rule 验证的规则 * $data 输入的全部数据 */ protected function checkName($value, $rule, $data=[]) { if ($value == 'yangphp') { return true; } else { return "账户名错误"; } }
五、验证场景
验证器:
//表示当edit场景,只验证 user_name 和 user_mobile protected $scene = [ 'edit' => ['user_name','user_mobile'], ];
控制器:
/** * 验证2 */ public function Validate2Act() { $data = request()->param(); try { $res = validate(User::class)->scene('edit')->check($data); return "验证通过了"; } catch (ValidateException $e) { $msg = $e->getError(); return json($msg); } }
当设定 edit场景只验证 user_name ,user_mobile 的格式。 user_truename,user_idcard 则不验证
六、验证规则
1、require 验证某个字段必须 2、number 验证某个字段的值是否是纯数字 3、integer 验证某个字段的值是否为整数 4、float 验证某个字段的值是否为浮点数字 5、boolean 验证某个字段的值是否为布尔值 6、email 验证某个字段的值是否为email地址 7、array 验证某个字段的值是否为数组 8、accepted 验证某个字段是否为为 yes, on, 或是 1 9、date 验证值是否为有效的日期 10、alpha 验证某个字段的值是否为纯字母 11、alphaNum 验证某个字段的值是否为字母和数字 12、alphaDash 验证某个字段的值是否为字母和数字,下划线_及破折号- 13、chs 验证某个字段的值只能是汉字 14、chsAlpha 验证某个字段的值只能是汉字、字母 15、chsAlphaNum 验证某个字段的值只能是汉字、字母和数字 16、chsDash 验证某个字段的值只能是汉字、字母、数字和下划线_及破折号 17、cntrl 验证某个字段的值只能是控制字符(换行、缩进、空格) 18、graph 验证某个字段的值只能是可打印字符(空格除外) 19、print 验证某个字段的值只能是可打印字符(包括空格) 20、lower 验证某个字段的值只能是小写字符 21、upper 验证某个字段的值只能是大写字符 22、space 验证某个字段的值只能是空白字符 23、xdigit 验证某个字段的值只能是十六进制字符串 24、activeUrl 验证某个字段的值是否为有效的域名或者IP 25、url 验证某个字段的值是否为有效的URL地址 26、ip 验证某个字段的值是否为有效的IP地址 27、dateFormat:format 验证某个字段的值是否为指定格式的日期 例如: 'create_time'=>'dateFormat:y-m-d' 28、mobile 验证某个字段的值是否为有效的手机 29、idCard 验证某个字段的值是否为有效的身份证格式 30、macAddr 验证某个字段的值是否为有效的MAC地址 31、zip 验证某个字段的值是否为有效的邮政编码 32、in 验证某个字段的值是否在某个范围 例如:'num'=>'in:1,2,3' 33、notIn 验证某个字段的值不在某个范围 34、between 验证某个字段的值是否在某个区间 35、notBetween 验证某个字段的值不在某个范围 36、length:num1,num2 验证某个字段的值的长度是否在某个范围 37、max:number 验证某个字段的值的最大长度 38、min:number 验证某个字段的值的最小长度 39、confirm 验证某个字段是否和另外一个字段的值一致 例如:'repassword'=>'require|confirm:password' 自动匹配验证规则: 如password和password_confirm是自动相互验证 只需要使用 'password'=>'require|confirm'
七、表单令牌
验证规则支持对表单的令牌验证:
HTML:
<input type="hidden" name="__token__" value="{:token()}" /> //也可以直接使用 {:token_field()}
控制器验证规则:
$check = request()->checkToken('__token__'); if(false === $check) { return "token 验证失败"; }
但行好事,莫问前程!
本文来自博客园,作者:yangphp,转载请注明原文链接:https://www.cnblogs.com/ypeih/p/15508398.html