ThinkPHP中create()方法自动验证实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ThinkPHP中create()⽅法⾃动验证实例
⾃动验证是ThinkPHP模型层提供的⼀种数据验证⽅法,可以在使⽤create创建数据对象的时候⾃动进⾏数据验证。
原理:
create()⽅法收集表单($_POST)信息并返回,同时触发表单⾃动验证,过滤⾮法字段,
在控制器中使⽤create()⽅法,(返回值为true/false),会⾃动触发模型类中的$_validate属性(为⽗类Model中的⽅法,在⼦类Model中重写),在$_validate中⾃定义验证规则(验证规则下⾯会详细说明),当create()⽅法没有数据即返回值为false时,通过$xxx对象->getError();获取并返回错误信息!
使⽤⾃动验证必须按照以下规则格式定义:
protected $_validate = array(
array(验证字段1,验证规则,错误提⽰,[验证条件,附加规则,验证时间]),
array(验证字段2,验证规则,错误提⽰,[验证条件,附加规则,验证时间]),
......
);
其中验证字段,验证规则,错误提⽰是必填项,验证条件,附加规则,验证时间为可选!
验证字段(必填):表单字段。
验证规则(必填):require 字段必须、email 邮箱、url URL地址、number 数字,还可以结合附加规则使⽤。
错误提⽰(必填):验证失败时返回的提⽰信息。
验证条件(可选):有0,1,2三种,0:_POST中存在的字段验证,默认;1:验证规则定义了就必须验证;2:值不为空时验证.
附加规则:
regex正则验证,定义的验证规则是⼀个正则表达式(默认)
function函数验证,定义的验证规则是⼀个函数名
callback⽅法验证,定义的验证规则是当前模型类的⼀个⽅法
confirm验证表单中的两个字段是否相同,定义的验证规则是⼀个字段名
equal验证是否等于某个值,该值由前⾯的验证规则定义
notequal验证是否不等于某个值,该值由前⾯的验证规则定义(3.1.2版本新增)
in验证是否在某个范围内,定义的验证规则可以是⼀个数组或者逗号分割的字符串
notin验证是否不在某个范围内,定义的验证规则可以是⼀个数组或者逗号分割的字符串(3.1.2版本新增)
length验证长度,定义的验证规则可以是⼀个数字(表⽰固定长度)或者数字范围(例如3,12 表⽰长度从3到12的范围)
between验证范围,定义的验证规则表⽰范围,可以使⽤字符串或者数组,例如1,31或者array(1,31)
notbetween验证不在某个范围,定义的验证规则表⽰范围,可以使⽤字符串或者数组(3.1.2版本新增)
expire验证是否在有效期,定义的验证规则表⽰时间范围,可以到时间,例如可以使⽤ 2012-1-15,2013-1-15 表⽰当前提交有效期在2012-1-15到2013-1-15之间,也可以使⽤时间戳定义
ip_allow验证IP是否允许,定义的验证规则表⽰允许的IP地址列表,⽤逗号分隔,例如201.12.2.5,201.12.2.6
ip_deny验证IP是否禁⽌,定义的验证规则表⽰禁⽌的ip地址列表,⽤逗号分隔,例如201.12.2.5,201.12.2.6
unique验证是否唯⼀,系统会根据字段⽬前的值查询数据库来判断是否存在相同的值,当表单数据中包含主键字段时unique不可⽤于判断主键字段本⾝
验证时间(可选):共有1,2,3三种,1:新增数据时候验证;2:编辑数据时候验证;3:全部情况下验证(默认);也可以可以根据业务需要增加其他的验证时间
下⾯附上代码:以注册为例
前台页⾯⽐较简单,代码就不贴出来了,下⾯是前台注册界⾯截图
控制器代码:
//注册
public function register(){
$user = new \Model\UserModel();
//两个逻辑:收集,展⽰
if (!empty($_POST)) {
//create()⽅法收集表单($_POST)信息并返回,同时触发表单⾃动验证,过滤⾮法字段 $date = $user->create();
//通过create()⽅法的返回值$date判断验证是否成功
if ($date) { //返回实在数据的时候才进⾏添加
//implode()把数组变为字符串
$date['user_hobby'] = implode(',', $date['user_hobby']);
$info = $user->add($date);
if ($info) {
//跳转⾸页
$this->redirect('Index/index');
}
}else{
//把错误信息分配到前台模板
$error = $user->getError();
$this->assign('error',$error);
}
}
//调⽤view视图
$this->display();
}
模型类代码:
class UserModel extends Model{
//是否批量处理验证,批量获取全部的错误验证信息
protected $patchValidate = true; //默认为false
//⾃动验证定义
protected $_validate = array(
//array(字段,验证规则,错误提⽰,验证条件,附加规则,验证时间)
//①⽤户名验证,不能为空
array('username','require','⽤户名不能为空'),
array('username','','该⽤户名已经被占⽤','0','unique'),
//②密码验证,不为空
array('password','require','密码不能为空'),
//③验证确认密码,必须填写,与密码保持⼀致
array('password2','require','确认密码必须填写'),
array('password2','password','两次密码保持⼀致',0,'confirm'),
//④邮箱验证
array('user_email','email','邮箱格式不正确',2),
//⑤qq验证,数字组成,5-12位
array('user_qq','number','qq必须是数字'),
array('user_qq','5,12','位数在5-12位之间',0,'length'),
//⑥学历验证,必须选⼀个
array('user_xueli','2,5','学位必须选择⼀个',0,'between'),
//⑦爱好验证,必须选择⼆个以上
//因为爱好返回的是数组,附加规则中没有可以直接⽤的规则,所以需⾃定义⽅法,⽤callback⽅法验证
array('user_hobby','check_hobby','爱好必须选两项或以上',1,'callback'),
);
//定义⽅法进⾏爱好验证
//参数$arg代表被验证的表单信息
function check_hobby($arg)
{
//判断数组长度是否⼤于2
if (count($arg)<2) {
return false; //会⾃动输出验证错误信息
}
return true;
}
}
把验证的错误信息在模板中给展⽰出来(部分代码)
<td style="width:13%; text-align: right;">
<label for="User_username" class="required">⽤户名
<span>*</span></label>
</td>
<td style="width:87%;">
<input class="inputBg" size="25" name="username" id="User_username" type="text" value="" />
<span style="color:red;"><{$ername|default:""}></span>
</td>
结果:
以上这篇ThinkPHP中create()⽅法⾃动验证实例就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。