thinkphp 自动验证学习
@ php 学习 thinkphp 验证
1,在thinkphp 中可以对create创建的数据对象进行验证 ,一般有两种验证方式: 静态验证,动态验证
1.1,静态验证: 在模型类里面通过$_validate属性定义验证规则
(1)验证格式:
array(array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),)
1,验证字段: 为数据表里的字段,同时也可以其他表单辅助字段,并且可以自定义并将自定义的字段映射到数据表的字段名
如:
ClassUserModelextendsModel{protected$_map=array('name'=>'username',//把表单中name映射到数据表的username字段'mail'=>'email',//把表单中的mail映射到数据表的email字段);}
2,验证规则: 系统还内置了一些常用正则验证的规则 有require (字段必填),email(邮箱格式),
url(url格式),currency(货币),number (正整数) ,integer(整数),double(浮点
数),zip(邮政编码),english(英文),并且这些规则默认附加规则是regex, 还有正
则表达式验证规则,但需要自定义设定好
3,错误提示: 自定义
4,验证条件:
包含下面几种情况:
self::EXISTS_VALIDATE 或者0 存在字段就验证(默认)
self::MUST_VALIDATE 或者1 必须验证
self::VALUE_VALIDATE或者2 值不为空的时候验证
5,附加条件: 参考手册 ,其中function 和callback 两种附加条件
5.1 callback 附加规则 ,其定义的验证规则为callback 方法的名字,附加规则为callback
如下例:
array(验证字段1,checkLength,错误提示,[验证条件,callback,验证时间,callback函数的参数]),其中checkLength中的$min ,$max 的实参可以定义为 array(3,5)。为$min 传的值为3,$max传的值为5
protectedfunctioncheckLength($str,$min,$max){preg_match_all("/./u",$str,$matches);$len=count($matches[0]);if($len<$min||$len>$max){returnfalse;}else{returntrue;}}
5.1 function 附加规则是相对与callback附加规则一样,只是将定义的规则方法,放在
Common 文件下Conmon文件夹建立function.php文件,后会自定调用此规则。
6,验证时间:
self::MODEL_INSERT或者1新增数据时候验证
self::MODEL_UPDATE或者2编辑数据时候验证
self::MODEL_BOTH或者3全部情况下验证(默认)
7 ,多字段验证:
在UserModel类中增加 :protected $patchValidate = true;
(2)静态验证完整格式
publicUserModelextendsModel{protected$_validate=array(array('verify','require','验证码必须!'),//默认情况下用正则进行验证array('name','','帐号名称已经存在!',0,'unique',1),//在新增的时候验证name字段是否唯一array('password','checkPwd','密码格式不正确',0,'function'),//自定义函数验证密码格式);}
根据model定义好验证规则后,就可以在使用create方法创建数据对象的时候自动调用
publicUserControllerextendsController{publicfunctionadd(){//判断是由post上传的数据if(IS_POST){if(!$User->create()){//如果创建失败表示验证没有通过输出错误提示信息exit($User->getError());}else{//验证通过可以进行其他数据操作}}}}
1.2,动态验证: 使用模型类的validate方法动态创建自动验证规则
在UserController 类的方法中定义
$rules=array(array('verify','require','验证码必须!'),//默认情况下用正则进行验证);$User=M("User");//实例化User对象if(!$User->validate($rules)->create()){//如果创建失败表示验证没有通过输出错误提示信息exit($User->getError());}else{//验证通过可以进行其他数据操作}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。