发新话题
打印

ThinkPHP模型自动验证和处理

ThinkPHP模型自动验证和处理

模型数据验证
系统内置了数据对象的自动验证功能,而大多数情况下面,数据对象是由表单提交的$_POST数据创建。
需要使用系统的自动验证功能,只需要在Model类里面定义$_validate属性,是由多个验证因子组成的数组,支持的验证因子格式:
代码: 复制内容到剪贴板
array(验证字段,验证规则,错误提示,验证条件,附加规则,验证时间)
验证字段就是定义需要验证的表单字段,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如确认密码和验证码等等。
验证规则 要进行验证的规则,需要结合附加规则
提示信息 用于验证失败后的提示信息定义
验证因子中上面三个参数必须定义,下面为可选参数。

验证条件
EXISTS_TO_VAILIDATE 或者0 存在字段就验证 (默认)
MUST_TO_VALIDATE 或者1 必须验证
VALUE_TO_VAILIDATE或者2 值不为空的时候验证

附加规则 配合验证规则使用,包括:
function 使用函数验证,前面定义的验证规则是一个函数名
callback 使用方法验证,前面定义的验证规则是一个当前Model类的方法
confirm 验证表单中的两个字段是否相同,前面定义的验证规则是一个字段名
equal 验证是否等于某个值,该值由前面的验证规则定义
in 验证是否在某个范围内,前面定义的验证规则必须是一个数组
unique 验证是否唯一,系统会根据字段目前的值查询数据库来判断是否存在相同的值
regex 使用正则进行验证,表示前面定义的验证规则是一个正则表达式(默认)
如果采用正则进行验证,会调用系统内置的验证类进行验证操作,该验证类位于ORG.Text.Validation,通过正则的方式对数据进行验证,并定义了一些常用的验证规则。包括:
require 字段必须
email 邮箱
url URL地址
currency 货币
number 数字
这些验证规则可以直接使用。

验证时间:
all 全部情况下验证(默认)
add 新增数据时候验证
edit 编辑数据时候验证

示例:
代码: 复制内容到剪贴板
var $_validate         =         array(

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

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

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

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

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

);
当使用系统的create方法创建数据对象的时候会自动进行数据验证操作,代码示例:
代码: 复制内容到剪贴板
$User = D(“User”);

$vo = $User->create();

if (!$vo){

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

$this->error($User->getError());

}
数据处理
在Model类定义 $_auto 属性,可以完成数据自动处理功能,用来处理默认值和其他系统写入字段。
$_auto属性是由多个填充因子组成的数组,填充因子定义格式:
代码: 复制内容到剪贴板
array(填充字段,填充内容,填充条件,附加规则)
填充字段就是需要进行处理的表单字段,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如确认密码和验证码等等。

填充条件包括:
ADD 新增数据的时候处理(默认方式)
UPDATE 更新数据的时候处理
ALL 所有情况下都进行处理

附加规则包括:
function 使用函数
callback 回调方法
field 用其它字段填充
string 字符串(默认方式)
示例:
代码: 复制内容到剪贴板
var $_auto = array (

array('status','1','ADD'),  // 默认把status字段设置为1

array('password','md5','ADD','function') // 对password字段在新增的时候使用md5函数处理

array('name','getName','ADD','callback') // 对name字段在新增的时候回调getName方法

array('mTime','time','UPDATE',’function’), // 对mTime字段在编辑的时候写入当前时间戳

);
PS:该自动填充可能会覆盖表单提交项目。其目的是为了防止表单非法提交字段。
使用Model类的create方法创建数据对象的时候会自动进行表单数据处理

TOP

发新话题