ThinkPHP开发指南-模型之自动验证

来自站长百科
跳转至: 导航、​ 搜索

导航:上一页

类型检查只是针对数据库级别的验证,所以系统还内置了数据对象的自动验证功能来完成模型的业务规则验证,而大多数情况下面,数据对象是由表单提交的$_POST数据创建。需要使用系统的自动验证功能,只需要在Model类里面定义$_validate属性,是由多个验证因子组成的数组,支持的验证因子格式:

PHP代码

array(验证字段,验证规则,错误提示,验证条件,附加规则,验证时间)   
  • 验证字段:需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如确认密码和验证码等等。(必须)
  • 验证规则: 要进行验证的规则,需要结合附加规则(必须)
  • 提示信息: 用于验证失败后的提示信息定义(必须)
  • 验证条件:(可选)

PHP代码

Model::EXISTS_TO_VAILIDATE 或者0 存在字段就验证 (默认)    

Model::MUST_TO_VALIDATE 或者1 必须验证     

Model::VALUE_TO_VAILIDATE或者2 值不为空的时候验证    

附加规则: 配合验证规则使用(可选),包括:

  • regex 使用正则进行验证,表示前面定义的验证规则是一个正则表达式(默认)
  • function 使用函数验证,前面定义的验证规则是一个函数名
  • callback 使用方法验证,前面定义的验证规则是当前Model类的一个方法
  • confirm 验证表单中的两个字段是否相同,前面定义的验证规则是一个字段名
  • equal 验证是否等于某个值,该值由前面的验证规则定义
  • in 验证是否在某个范围内,前面定义的验证规则必须是一个数组
  • unique 验证是否唯一,系统会根据字段目前的值查询数据库来判断是否存在相同的值

系统还内置了一些常用正则验证的规则,可以直接使用,包括:require 字段必须、email 邮箱、url URL地址、currency 货币、number 数字,这些验证规则可以直接使用。验证时间:(可选)

PHP代码

Model:: MODEL_INSERT 或者1新增数据时候验证    

Model:: MODEL_UPDATE 或者2编辑数据时候验证    

Model:: MODEL_BOTH 或者3 全部情况下验证(默认)    

示例:PHP代码

protected $_validate         =         array(    

array('verify','require','验证码必须!'), //默认情况下用正则进行验证    

array(name,'','帐号名称已经存在!',0,’unique’,1), // 在新增的时候验证name字段是否唯一    

array('value',array(1,2,3),'值的范围不正确!',2,’in’), // 当值不为空的时候判断是否在一个范围内    

array('repassword','password','确认密码不正确',0,’confirm’), // 验证确认密码是否和密码一致    

array('password','checkPwd','密码格式不正确',0,’function’), // 自定义函数验证密码格式    

);    

当使用系统的create方法创建数据对象的时候会自动进行数据验证操作,代码示例:

PHP代码

$User = D("User"); // 实例化User对象    

if (!$User->create()){    

// 如果创建失败 表示验证没有通过 输出错误提示信息    

exit($User->getError());    

}else{    

// 验证通过 可以进行其他数据操作    

}   

通常来说,每个数据表对应的验证规则是相对固定的,但是有些特殊的情况下面可能会改变验证规则,我们可以动态的改变验证规则来满足不同条件下面的验证:

PHP代码

$User = D("User"); // 实例化User对象    

$validate    =    array(    

array('verify','require','验证码必须!'), // 仅仅需要进行验证码的验证    

);    

$User-> setProperty("_validate",$validate);    

$result = $User->create();    

if (!$result){    

// 如果创建失败 表示验证没有通过 输出错误提示信息    

exit($User->getError());    

}else{    

// 验证通过 可以进行其他数据操作    

}