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中动态HTML的输出技术
Oct 09 PHP
PHP生成静态页面详解
Nov 19 PHP
php获取本地图片文件并生成xml文件输出具体思路
Apr 27 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
Aug 21 PHP
PHP中round()函数对浮点数进行四舍五入的方法
Nov 19 PHP
PHP实现过滤各种HTML标签
May 17 PHP
php利用gd库为图片添加水印
Nov 09 PHP
laravel创建类似ThinPHP中functions.php的全局函数
Nov 26 PHP
PHP实现判断数组是一维、二维或几维的方法
Feb 06 PHP
PHP常量define和const的区别详解
May 18 PHP
关于php开启错误提示的总结
Sep 24 PHP
解决Laravel无法使用COOKIE和SESSION的问题
Oct 16 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
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
PHP7正式版测试,性能惊艳!
2015/12/08 PHP
php实现的xml操作类
2016/01/15 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
JS保留两位小数,多位小数的示例代码
2014/01/07 Javascript
jquery选择符快速提取web表单数据示例
2014/03/27 Javascript
JavaScript 作用域链解析
2014/11/13 Javascript
使用jquery 简单实现下拉菜单
2015/01/14 Javascript
javascript实现youku的视频代码自适应宽度
2015/05/25 Javascript
每天一篇javascript学习小结(面向对象编程)
2015/11/20 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
JQuery ztree带筛选、异步加载实例讲解
2016/02/25 Javascript
省市联动效果的简单实现代码(推荐)
2016/06/06 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
javaScript封装的各种写法
2017/08/14 Javascript
详解react-redux插件入门
2018/04/19 Javascript
微信小程序实现动态获取元素宽高的方法分析
2018/12/10 Javascript
Python实现读取目录所有文件的文件名并保存到txt文件代码
2014/11/22 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
在Tensorflow中实现leakyRelu操作详解(高效)
2020/06/30 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
全球最大的房车租赁市场:Outdoorsy
2018/09/19 全球购物
JAVA高级程序员面试题
2013/09/06 面试题
毕业生自荐信的主要内容
2013/10/29 职场文书
创建文明学校实施方案
2014/03/11 职场文书
毕业生如何写自我鉴定
2014/03/15 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
农村党员对照检查材料
2014/09/24 职场文书
实验室安全管理制度
2015/08/05 职场文书
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
2021/05/22 Python
Python+Matplotlib+LaTeX玩转数学公式
2022/02/24 Python
世界无敌的ICOM IC-R9500宽频接收机
2022/03/25 无线电