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 相关文章推荐
QueryPath PHP 中的jQuery
Apr 11 PHP
php5 apache 2.2 webservice 创建与配置(java)
Jan 27 PHP
php cc攻击代码与防范方法
Oct 18 PHP
PHP gbk环境下json_dencode传送来的汉字
Nov 13 PHP
PHP获取MSN好友列表类的实现代码
Jun 23 PHP
php中{}大括号是什么意思
Dec 01 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
Jul 18 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
Aug 18 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
Jul 14 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 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中获取变量的变量名的一段代码的bug分析
2011/07/07 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
Laravel 修改验证异常的响应格式实例代码详解
2020/05/25 PHP
PHPStorm 2020.1 调试 Nodejs的多种方法详解
2020/09/17 NodeJs
JavaScript window.document的属性、方法和事件小结
2012/10/24 Javascript
nodejs中简单实现Javascript Promise机制的实例
2014/12/06 NodeJs
jQuery实现鼠标点击弹出渐变层的方法
2015/07/09 Javascript
基于jQuery实现自动轮播旋转木马特效
2015/11/02 Javascript
jQuery mobile 移动web(4)
2015/12/20 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
vue项目中实现图片预览的公用组件功能
2018/10/26 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
2019/07/05 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
python实现系统状态监测和故障转移实例方法
2013/11/18 Python
简单解析Django框架中的表单验证
2015/07/17 Python
对numpy中shape的深入理解
2018/06/15 Python
Python实现合并excel表格的方法分析
2019/04/13 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
使用pygame编写Flappy bird小游戏
2020/03/14 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
PyCharm最新激活码PyCharm2020.2.3有效
2020/11/18 Python
自我鉴定标准格式
2014/03/19 职场文书
小学生作文评语大全
2014/04/21 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
2014年四风个人对照检查及整改措施
2014/10/28 职场文书
优秀教师单行材料
2014/12/16 职场文书
团代会开幕词
2015/01/28 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
基于Golang 高并发问题的解决方案
2021/05/08 Golang
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python