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 相关文章推荐
在Windows中安装Apache2和PHP4的权威指南
Oct 09 PHP
默默小谈PHP&amp;MYSQL分页原理及实现
Jan 02 PHP
PHP中全面阻止SQL注入式攻击分析小结
Jan 30 PHP
php在程序中将网页生成word文档并提供下载的代码
Oct 09 PHP
php用正则表达式匹配URL的简单方法
Nov 12 PHP
php计算当前程序执行时间示例
Apr 24 PHP
C/S和B/S两种架构区别与优缺点分析
Oct 23 PHP
php单例模式示例分享
Feb 12 PHP
php实现修改新闻时删除图片的方法
May 12 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
php post json参数的传递和接收处理方法
May 31 PHP
php基于 swoole 实现的异步处理任务功能示例
Aug 13 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连接mysql是否成功的代码分享
2014/01/24 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
学习YUI.Ext第五日--做拖放Darg&amp;Drop
2007/03/10 Javascript
利用js对象弹出一个层
2008/03/26 Javascript
分享20款好玩的jQuery游戏
2011/04/17 Javascript
JavaScript中的细节分析
2012/06/30 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
JavaScript数据类型之基本类型和引用类型的值
2015/04/01 Javascript
JavaScript DOM事件(笔记)
2015/04/08 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
JavaScript递归操作实例浅析
2016/10/31 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
vue 添加vux的代码讲解
2017/11/30 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
2017/12/19 Javascript
Vue三层嵌套路由的示例代码
2018/05/05 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
[01:20]PWL开团时刻DAY9——听说潮汐没用?
2020/11/10 DOTA
Python中转换角度为弧度的radians()方法
2015/05/18 Python
Python实现一个Git日志统计分析的小工具
2017/12/14 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
python3文件复制、延迟文件复制任务的实现方法
2019/09/02 Python
基于python实现查询ip地址来源
2020/06/02 Python
用python写爬虫简单吗
2020/07/28 Python
Python实现微信表情包炸群功能
2021/01/28 Python
sort命令的作用和用法
2013/08/25 面试题
对象的序列化(serialization)类是面向流的,应如何将对象写入到随机存取文件中
2015/06/22 面试题
综治工作汇报材料
2014/10/27 职场文书
2014年车间主任工作总结
2014/12/10 职场文书