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插件 Simple HTML DOM 用DOM方式处理HTML
Jul 01 PHP
php+js iframe实现上传头像界面无跳转
Apr 29 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
May 15 PHP
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
php析构函数的简单使用说明
Aug 24 PHP
纯PHP代码实现支付宝批量付款
Dec 24 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
Jul 06 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
Oct 03 PHP
PHP中SQL查询语句的id=%d解释(推荐)
Dec 10 PHP
ThinkPHP删除栏目(实现批量删除栏目)
Jun 21 PHP
PHP7新功能总结
Apr 14 PHP
Laravel实现搜索的时候分页并携带参数
Oct 15 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
PHP session有效期问题
2009/04/26 PHP
一步一步学习PHP(2)――PHP类型
2010/02/15 PHP
PHP三层结构(上) 简单三层结构
2010/07/04 PHP
php数组去重的函数代码
2013/02/03 PHP
解析PHP跨站刷票的实现代码
2013/06/18 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
2016/04/20 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
浅谈laravel 5.6 安装 windows上使用composer的安装过程
2019/10/18 PHP
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
jquery 实现checkbox全选,反选,全不选等功能代码(奇数)
2012/10/24 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
jQuery Validate初步体验(二)
2015/12/12 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
2016/02/06 Javascript
jQuery增加与删除table列的方法
2016/03/01 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
vue指令v-html使用过滤器filters功能实例
2019/10/25 Javascript
微信小程序后端实现授权登录
2020/02/24 Javascript
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
[09:31]2016国际邀请赛中国区预选赛Yao赛后采访 答题送礼
2016/06/27 DOTA
在Python中使用元类的教程
2015/04/28 Python
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
Python数据类型之Set集合实例详解
2019/05/07 Python
中国电子产品外贸网站:MiniIntheBox
2017/02/06 全球购物
Bonami斯洛伐克:购买家具和家居饰品
2019/07/02 全球购物
Alexandre Birman美国官网:亚历山大·伯曼
2019/10/30 全球购物
阿迪达斯印尼官方网站:adidas印尼
2020/02/10 全球购物
保加利亚服装和鞋类购物网站:Bibloo.bg
2020/11/08 全球购物
师德标兵先进事迹材料
2014/12/19 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
同学聚会祝酒词
2015/08/10 职场文书
2016年第32个教师节致辞
2015/11/26 职场文书
如何利用pygame实现打飞机小游戏
2021/05/30 Python
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技