## 模型验证 通过在模型中设置 validate 属性可以方便的进行数据验证,模型验证继承了 [Validate 验证组件](http://www.kancloud.cn/houdunwang/hdphp3/215225),所以验证服务中在的所有方法均可以使用。 因为使用了 [Validate 验证组件](http://www.kancloud.cn/houdunwang/hdphp3/215225) 当发现错误时的处理方式与 Validate组件处理相同,请查看 Validate组件 关于**处理方式**的相关内容。 [TOC] ## 语法 ``` array(字段名,验证方法,错误信息,验证条件,验证时机) 验证条件 (可选): self::EXISTS_VALIDATE 值:1 有字段时 self::NO_EMPTY_VALIDATE 值:2 值不为空时 self::MUST_VALIDATE 值:3 必须验证 self::EMPTY_VALIDATE 值:4 值为空时验证 self::NO_EXIST_VALIDATE 值:5 不存在字段时处理 验证时间 (可选): self::MODEL_INSERT 值:1 插入时处理 self::MODEL_UPDATE 值:2 更新时处理 self::MODEL_BOTH 值:3 全部情况时处理 ``` > 当验证不通过时,系统会自动进行跳转,如果是 ajax 请求返回json数据。 #### 正则表达式验证 如果函数是正则表达式,系统会自动以正则验证 ``` namespace system\model; use houdunwang\model\Model; class Field extends Model{ protected $validate=[ ['age','/^\d+$/','年龄必须是数字',self::MUST_VALIDATE,self::MODEL_BOTH] ]; } ``` #### 表值碓一验证 ``` protected $validate = array( //验证username的值必须在user_table表中唯一 //系统可以根据数据中的主键字段自动分析,也就是说更新时会忽略当前字段相同值 //也就是说最后2个参数都设置为3即可 ['username','unique','用户已存在',self::MUST_VALIDATE,self::MODEL_BOTH] ); //更新时,本次更新的记录数据有相同字段值是可以的。 ``` ## 自定义验证规则 ``` namespace system\model; use houdunwang\model\Model; class userModel extends Model { protected $validate = array( ['username', 'checkUser', '用户名长度错误',self::MUST_VALIDATE,self::MODEL_BOTH] ); //以下是自定义的验证规则 //$field 字段名 //$value 字段值 //$params 参数比如 maxlen:10 10就是参数 //$data 所有表单数据 public function checkUser($field, $value, $params, $data) { //返回true,为验证通过 if (mb_strlen($value, 'utf-8') > 5) { return true; } } } ``` ## 系统规则 以下罗列出部分 [自动验证组件](http://www.kancloud.cn/houdunwang/hdphp3/215225) 提交的方法,这些验证规则都可以在模型验证中使用。 ``` required 字段不存在时验证失败 exists 字段存在时验证失败 email 邮箱 http 网址 tel 固定电话 phone 手机 zipCode 邮政编码 user 用户名长度如 :user:5,20 maxlen 最大长度如:maxlen:10 minlen 最小长度如:minlen:10 num 数字范围 如:num:20,60 regexp 正则如:regexp:/^\d{5,20}$/ confirm 两个字段值比对如:confirm:password2 china 验证中文 identity 身份证 ``` ## 验证顺序 参与到验证的动作包括,模型方法、系统验证规则,验证顺序如下: 1. 模型中是否存在同名的验证方法函数 2. 系统验证类中是否存在同名的验证方法 3. 验证方法否为正则表达式 4. 以上3项都没有则本条规则忽略 ## 显示错误 #### redirect 模式 当配置项的错误处理设置为 redirect 时,系统会员向模板中分配包含错误信息的变量 $errors,所以可以要模板中使用以下方式显示错误。 ``` <if !empty($errors)> <if value="$errors"> <foreach from="$errors" value="$e"> <li>{{$e}}</li> </foreach> </if> ``` #### show 模式 当配置项的错误处理设置为 show 时,系统将使用 config/validate.php 配置文件中的 template 配置项指定的模板显示错误。 > 模型验证使用 Validate 组合处理,所以更多功能请查看 [Validate 验证组件](http://www.kancloud.cn/houdunwang/hdphp3/215225) 说明文档。