感觉这个模型,加验证规则,在控制器控制字段是否能进行操作,这个模式很好用啊
原文地址:ThinkPHP:模型自动验证和处理
作者:beartan11_r0qei
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字段
设置为1array('password','md5','ADD','function') // 对password字段在新增的时候使用md5函数处理array('name','getName','ADD','callback') // 对name字段在新增的时候回调getName方法array('mTime','time','UPDATE',’function’), // 对mTime字段在编辑的时候写入当前时间戳);