ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
#模型验证 通过在模型中设置 validate 属性可以方便的进行数据验证。 **验证错误信息同时会保存在$_SESSION['_validate']中** ##语法 ``` 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 全部情况时处理 ``` 错误信息会记录到模型对象的 error 属性中,使用getError 模型方法获取 ##create方法 执行模型的 create 方法时会自动进行自动验证。 >注:执行add或save方法时会自动执行 create 模型方法,所以执行add或save方法前执行create会造成两次处理,没有必要。 ``` <?php namespace Home\Model; use Hdphp\Model\Model; class userModel extends Model { protected $validate = [ ['username','required','用户名不能为空',3,3] ]; public function store() { if($this->create()){ echo ("验证通过"); } } } ``` ##添加实例 ``` <?php namespace Home\Model; use Hdphp\Model\Model; class userModel extends Model { protected $validate = [ ['username','required','用户名不能为空',3,3] ]; public function store() { return $this->add(); } } ``` **正则表达式验证** 如果函数是正则表达式,系统会自动以正则验证 ``` <?php namespace Cms\Model; use Hdphp\Model\Model; class Field extends Model{ protected $validate=array( ['age','/^\d+$/','年龄必须是数字',3,3] ); } ``` **表值碓一验证** ``` protected $validate = array( //验证username的值必须在user_table表中唯一 //系统可以根据数据中的主键字段自动分析,也就是说更新时会忽略当前字段相同值 //也就是说最后2个参数都设置为3即可 ['username','unique','用户已存在',3,3] ); //更新时,本次更新的记录数据有相同字段值是可以的。 ``` ##自定义验证规则 ``` <?php namespace Home\Model; use Hdphp\Model\Model; class userModel extends Model { protected $validate = array( ['username', 'checkUser', '用户名长度错误', 3, 3] ); //以下是自定义的验证规则 //$field 字段名 //$value 字段值 //$params 参数比如 maxlen:10 10就是参数 //$data 所有表单数据 public function checkUser($field, $value, $params, $data) { //返回true,为验证通过 if (mb_strlen($value, 'utf-8') > 5) { return true; } } } ``` ##系统规则 ``` 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项都没有则本条规则忽略