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之变量、常量学习笔记
Mar 27 PHP
php下使用iconv需要注意的问题
Nov 20 PHP
php 判断服务器操作系统的类型
Feb 17 PHP
9个实用的PHP代码片段分享
Jan 22 PHP
php实现修改新闻时删除图片的方法
May 12 PHP
Symfony生成二维码的方法
Feb 04 PHP
php获取本机真实IP地址实例代码
Mar 31 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
Nov 02 PHP
PHP获取真实客户端的真实IP
Mar 07 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
Jun 29 PHP
PHP实现的敏感词过滤方法示例
Mar 06 PHP
KindEditor在php环境下上传图片功能集成的方法示例
Jul 20 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
IStream与TStream之间的相互转换
2008/08/01 PHP
php设计模式  Command(命令模式)
2011/06/17 PHP
php多线程实现方法及用法实例详解
2015/10/26 PHP
总结的一些PHP开发中的tips(必看篇)
2017/03/24 PHP
php实现文章评论系统
2019/02/18 PHP
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
Js实现动态添加删除Table行示例
2014/04/14 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
JavaScript中的acos()方法使用详解
2015/06/14 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
微信小程序实现组件顶端固定或底端固定效果(不随滚动而滚动)
2020/04/09 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
vue实现购物车列表
2020/06/30 Javascript
python标准算法实现数组全排列的方法
2015/03/17 Python
Python极简代码实现杨辉三角示例代码
2016/11/15 Python
Python 错误和异常代码详解
2018/01/29 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
python tkinter 设置窗口大小不可缩放实例
2020/03/04 Python
Python如何绘制日历图和热力图
2020/08/07 Python
python3将变量输入的简单实例
2020/08/19 Python
python 如何调用远程接口
2020/09/11 Python
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
销售冠军获奖感言
2014/02/03 职场文书
2016年春节问候语
2015/11/11 职场文书
浅析Django接口版本控制
2021/06/26 Python
MySQL连接控制插件介绍
2021/09/25 MySQL
MySQL中一条update语句是如何执行的
2022/03/16 MySQL
Python实现归一化算法详情
2022/03/18 Python
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android