自动验证是ThinkPHP模型层提供的一种数据验证方法,使用create创建数据对象时可以自动验证数据。
原则:
create()方法收集表单($_POST)信息并返回,同时触发表单的自动验证并过滤非法字段。
在控制器中使用create()方法(返回值为true/false)将自动触发model类中的$_validate属性(这是父类Model中的一个方法,在子类Model中被重写),并自定义$_validate中的验证规则(验证规则将在下面详细描述)。当create()方法没有数据,即返回值为false时,它会传递$xxx对象-getError()。获取并返回错误消息!
自动身份验证的使用必须以以下规则格式定义:
protected $ _ validate=array(array(验证字段1、验证规则、错误提示、[验证条件、附加规则、验证时间]),array(验证字段2、验证规则、错误提示、[验证条件、附加规则、验证时间]),);其中,校验字段、校验规则、错误提示为必填项,校验条件、附加规则、校验时间为可选项!
验证字段(必填):表单字段。
身份验证规则(必需):必需字段必须是电子邮件地址、url URL地址、号码,也可以与其他规则结合使用。
错误提示(必需):身份验证失败时返回的提示信息。
验证条件(可选):有三种类型:0、1、2、0:字段验证存在于_ post,默认;1:一旦定义了验证规则,就必须对其进行验证;2:当值不为空时验证。
附加规则:
Regex正则验证,定义的验证规则是正则表达式(默认)函数验证,定义的验证规则是函数名回调方法验证,定义的验证规则是当前模型类确认表单中两个字段是否相同的方法,定义的验证规则是等于验证是否等于某个值的字段名。该值不等于先前验证规则(在3.1.2版本中添加)定义的某个值。定义的验证规则可以是数组或逗号分隔的字符串。notin验证它是否不在某个范围内。定义的验证规则可以是长度验证长度的数组或逗号分隔的字符串(在版本3.1.2中添加)。定义的验证规则可以是数字(表示固定长度)或验证范围之间的数字范围(例如,3,12表示从3到12的范围)。定义的验证规则表示一个范围,可以使用字符串或数组,如1。31或数组(1,31)之间的not验证不在某个范围内。定义的验证规则指示范围。您可以使用字符串或数组(在3.1.2版本中添加)来验证它是否在有效期内。定义的验证规则指示时间范围,可以达到该时间。比如可以用2012-1-15。2013-1-15表示当前提交期为2012-1-15至2013-1-15。您还可以使用时间戳来定义是否允许ip_allow。定义的验证规则表示由逗号分隔的允许IP地址列表,如201.12.2.5和201.12.2.6 IP _定义的验证规则表示由逗号分隔的禁止IP地址列表。例如,201.12.2.5,201.12.2.6 unique验证其是否唯一。系统将根据字段的当前值查询数据库,以确定是否有相同的值。当表单数据包含主键字段时,unique不能用来确定主键字段本身的校验时间(可选):有1、2、3种,11种。2:编辑数据时验证;3:验证所有情况(默认);您也可以根据业务需要增加其他验证时间
附上以下代码:以注册为例
前台页面比较简单,代码就不贴了。下面是前台注册界面的截图
控制器代码:
//注册公共函数register(){ $ user=new model user model();//两个逻辑:collect和show if(!Empty($_POST)) {//create()方法收集表单($_POST)信息并返回,同时触发表单自动验证,过滤非法字段$ date=$ user-create();//通过create()方法的返回值$date判断验证是否成功。if ($date) {//只在返回真实数据时添加。//interfaced()将数组改为字符串$ date[' user _ hobby ']=interfaced(',',$ date[' user _ hobby ']);$ info=$ user-add($ date);If ($info) {//跳转到第一页$ this-重定向(' Index/Index ');} }else{ //将错误信息分配给前台模板$ error=$ user-getError();$this-assign('error ',$ error);} }//调用视图视图$ this-display();}模型类代码:
类UserModel扩展Model{ //是否批量处理验证,批量获取所有受$ patchValidate=true保护的错误验证信息;//默认值为false //自动验证定义受保护的$ _ validate=array (//array(字段、验证规则、错误提示、验证条件、附加规则、验证时间)//用户名验证不能为null Array(‘username’,‘require’,‘username’不能为null),Array(‘username’,“”,‘用户名已经被占用’,‘0’,‘唯一’),//密码验证,不能为null Array(‘password 2’),//验证并确认密码,密码必须填写并与密码数组(‘password 2’)一致数组(' password2 ',' password ','两个密码一致',0,' confirm '),//邮箱验证数组(' user_email ',' email ','邮箱格式不正确',2),//qq验证,数字合成,5-12位数组(' user_qq ',' number ',' qq必须是数字'),数组(' user_qq ',' 5,12 ','位数在5-12位之间',0,' length '),//学历验证,必须选择一个数组(' user ')介于'),//爱好验证,两个以上//因为爱好返回一个数组,附加规则中没有可以直接使用的规则,所以需要自定义方法,使用回调方法验证Array(‘user _ hobby’,‘check _ hobby’,‘爱好必须选择两个或两个以上的项目’,1,‘callback’)。//定义爱好验证的方法//参数$arg表示已验证的表单信息函数check_hobby($arg) {//如果(count($arg)2) {return false,则判断数组长度是否大于2;//将自动输出验证错误消息}返回true}}在模板中显示验证的错误信息(部分代码)
TD style=' width :13%;text-align : right;'标签为=' user _ username' class='必选' username span */span/label/tdtd style=' width :87%;'input class=' input BG ' size=' 25 ' name=' username ' id=' User _ username ' type=' text ' value=' '/span style=' color : red;'{ $ error . username | default : ' ' }/span/TD result:
上面ThinkPHP中create()方法自动验证的例子是边肖分享的全部内容,希望能给大家一个参考和支持。