ThinkPHP中create()方法自动验证表单信息


Posted in PHP onApril 28, 2017

自动验证是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:值不为空时验证.

附加规则:

ThinkPHP中create()方法自动验证表单信息

验证时间(可选):共有1,2,3三种,1:新增数据时候验证;2:编辑数据时候验证;3:全部情况下验证(默认);也可以可以根据业务需要增加其他的验证时间

下面附上代码:以注册为例

前台页面比较简单,代码就不贴出来了,下面是前台注册界面截图

ThinkPHP中create()方法自动验证表单信息

控制器代码:

//注册
 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;"><{$error.username|default:""}></span>
</td>

结果:

ThinkPHP中create()方法自动验证表单信息

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
非常好的php目录导航文件代码
Oct 09 PHP
Discuz!下Memcache缓存实现方法
May 28 PHP
PHP实现生成透明背景的PNG缩略图函数分享
Jul 08 PHP
php操作xml入门之cdata区段
Jan 23 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
Apr 15 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
Apr 20 PHP
PHP整合PayPal支付
Jun 11 PHP
PHP模块化安装教程
Jun 01 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
Aug 12 PHP
浅谈PHP中的数据传输CURL
Sep 06 PHP
PHP使用递归按层级查找数据的方法
Nov 10 PHP
Laravel中获取IP的真实地理位置
Apr 01 PHP
ThinkPHP实现简单登陆功能
Apr 28 #PHP
ThinkPHP实现分页功能
Apr 28 #PHP
ThinkPHP实现附件上传功能
Apr 27 #PHP
使用ThinkPHP生成缩略图及显示
Apr 27 #PHP
php实现头像上传预览功能
Apr 27 #PHP
php文件上传及下载附带显示文件及目录功能
Apr 27 #PHP
phpMyAdmin无法登陆的解决方法
Apr 27 #PHP
You might like
点评山进PR-D3L三波段收音机
2021/03/02 无线电
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
2010/03/27 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
动态创建script标签实现跨域资源访问的方法介绍
2014/02/28 Javascript
jquery的checkbox,radio,select等方法小结
2016/08/30 Javascript
十分钟带你快速了解React16新特性
2017/11/10 Javascript
javascript字体颜色控件的开发 JS实现字体控制
2017/11/27 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
vue-router的使用方法及含参数的配置方法
2018/11/13 Javascript
微信小程序云开发 搭建一个管理小程序
2019/05/17 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
2020/07/28 Javascript
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
Python实现完整的事务操作示例
2017/06/20 Python
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
Python 3.x基于Xml数据的Http请求方法
2018/12/28 Python
用python一行代码得到数组中某个元素的个数方法
2019/01/28 Python
Python 格式化打印json数据方法(展开状态)
2020/02/27 Python
Python实现京东抢秒杀功能
2021/01/25 Python
CSS中垂直居中的简单实现方法
2015/07/06 HTML / CSS
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
2016/03/16 HTML / CSS
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
nohup的用法
2014/08/10 面试题
成都人事代理协议书
2014/10/25 职场文书
2014年保洁员工作总结
2014/11/19 职场文书
优秀班组申报材料
2014/12/25 职场文书
2015年度党风廉政建设工作情况汇报
2015/01/02 职场文书
2015年新农合工作总结
2015/03/30 职场文书
2015年教育实习工作总结
2015/04/24 职场文书
一个独生女的故事观后感
2015/06/04 职场文书
学法用法心得体会(2016推荐篇)
2016/01/21 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA