自动验证是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:值不为空时验证.

附加规则:

regex 正则验证,定义的验证规则是一个正则表达式(默认)
function 函数验证,定义的验证规则是一个函数名
callback 方法验证,定义的验证规则是当前模型类的一个方法
confirm 验证表单中的两个字段是否相同,定义的验证规则是一个字段名
equal 验证是否等于某个值,该值由前面的验证规则定义
notequal 验证是否不等于某个值,该值由前面的验证规则定义(3.1.2版本新增)
in 验证是否在某个范围内,定义的验证规则可以是一个数组或者逗号分割的字符串
notin 验证是否不在某个范围内,定义的验证规则可以是一个数组或者逗号分割的字符串(3.1.2版本新增)
length 验证长度,定义的验证规则可以是一个数字(表示固定长度)或者数字范围(例如3,12 表示长度从3到12的范围)
between 验证范围,定义的验证规则表示范围,可以使用字符串或者数组,例如1,31或者array(1,31)
notbetween 验证不在某个范围,定义的验证规则表示范围,可以使用字符串或者数组(3.1.2版本新增)
expire 验证是否在有效期,定义的验证规则表示时间范围,可以到时间,例如可以使用 2012-1-15,2013-1-15 表示当前提交有效期在2012-1-15到2013-1-15之间,也可以使用时间戳定义
ip_allow 验证IP是否允许,定义的验证规则表示允许的IP地址列表,用逗号分隔,例如201.12.2.5,201.12.2.6
ip_deny 验证IP是否禁止,定义的验证规则表示禁止的ip地址列表,用逗号分隔,例如201.12.2.5,201.12.2.6
unique 验证是否唯一,系统会根据字段目前的值查询数据库来判断是否存在相同的值,当表单数据中包含主键字段时unique不可用于判断主键字段本身

验证时间(可选):共有1,2,3三种,1:新增数据时候验证;2:编辑数据时候验证;3:全部情况下验证(默认);也可以可以根据业务需要增加其他的验证时间

下面附上代码:以注册为例

前台页面比较简单,代码就不贴出来了,下面是前台注册界面截图

控制器代码:

//注册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){//判断数组长度是否大于2if (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>

结果:

转载于:https://www.cnblogs.com/zxf100/p/6764944.html

ThinkPHP中create()方法自动验证表单信息相关推荐

  1. php create()方法,ThinkPHP中create()方法自动验证实例

    ThinkPHP中create()方法自动验证实例2020-06-16 04:24:32 自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验 ...

  2. 企业级 SpringBoot 教程 (十九) 验证表单信息

    这篇文篇主要简述如何在springboot中验证表单信息.在springmvc工程中,需要检查表单信息,表单信息验证主要通过注解的形式. 构建工程 创建一个springboot工程,由于用到了 web ...

  3. PHP的create方法,Thinkphp中Create方法深入探究

    由于工作原因在thinkPHP的create()方法上遇到了问题,所以跟踪了create(),从而进一步探究了create()方法. 原来create()方法原来有两个参数,本文就此作简要说明,需要的 ...

  4. php 自动验证表单类,thinkPHP 表单自动验证功能

    昨天晚上我们老大叫我弄表单自动验证功能,愁了半天借鉴了好多官网的知识,才出来,诶,总之分享一下我自己的成果吧! thinkphp 在Model基类为我们定义了自动验证的函数和正则表达式,我们只需要在对 ...

  5. Flask项目实战——7—(Redis数据库存储验证码信息、验证登录界面的表单信息、注册功能实现、登录实现)

    推荐一个API平台:聚合数据 1.Redis数据库存储验证码信息 保存手机验证码到Redis数据库 公有视图文件:apps/common/views.py # -*- encoding: utf-8 ...

  6. 关于微信小程序中uView中通过packer选择器修改表单无法触发form组件的表单验证的问题

    uView中使用form表单组件,如果form-item为正常的input组件,在输入和修改form-item绑定的变量的时候,都会触发form表单的表单验证事件 但是如果form-item中不是in ...

  7. 用 Javascript 验证表单(form)中多选框(checkbox)值

    和单选框一样,许多新手在用 Javascript 验证表单(form)中多选框(checkbox)的值时,都会遇到问题,原因是 checkbox 和普通的文本框在获取值的时候有很大不同,本文介绍了一个 ...

  8. Html:小技巧:自动提交表单的实现方法

    Html:小技巧:自动提交表单的实现方法 方法一: <html> <head> <title>Untitled Document</title> (1) ...

  9. azure云服务使用方法_使用Azure认知服务自动执行表单处理

    azure云服务使用方法 由机器学习提供支持的 Microsoft认知服务是一种向您的应用程序添加人工智能的简便方法,使您可以按需付费,访问各种有用的算法 . 与许多其他Web服务不同,它们正在不断发 ...

  10. jquery验证表单很简单的方法

    现在网上有很多jquery验证表单的插件,但都写的比较复杂.一般都有两三个文件. 我今天写一个最简单但是很实用的验证登录表单的方法. 我基本上只是给大家提供一种思路.jquery插件一般也是按这个思路 ...

最新文章

  1. json qbytearray 串 转_如何通过QByteArray在JSON中存储QPixmap?
  2. [LAMP]Apache和PHP的结合
  3. 从R-CNN到Mask R-CNN
  4. ProjectEuler 005题
  5. 澎湃新闻产品总监首度分享,如何快速在新闻类APP中异军突围?一年时间进入前4名...
  6. php网站适合优化_php开发大型网站如何优化的方案详解
  7. 交流继电器rc吸收电路_使用固态继电器的注意事项
  8. 鲜为人知的软件项目管理原则(转)
  9. 误删path怎么办(已重启)
  10. 迷你世界无限迷你币体验服务器,迷你世界体验服无限迷你币
  11. pytho tkinter 应用第一个窗口
  12. 小米研发团队从400人增至3700人;iOS 13.3“杀后台”问题缓解;FreeBSD 12.1发布|极客头条...
  13. Spring Cloud 异常处理
  14. 事业单位考试高频考点二:经济
  15. Android手机怎么打开exe,安卓手机如何打开.exe文件 安卓手机exe文件怎么打开
  16. 怎么安装64位JAVA,大师来详解
  17. Python乒乓球小游戏源代码
  18. mmc rescan简析
  19. linux系统的优点
  20. QQ微派狼人杀经典秘籍进阶篇

热门文章

  1. 回顾|腾讯AI打败王者荣耀职业队,AI训练一天等于人类440年
  2. 「05」回归的诱惑:一文读懂线性回归
  3. 性能优化篇 之 如何开展优化类的工作(2)
  4. 1015 德才论 (25 分)—PAT (Basic Level) Practice (中文)
  5. Amlogic_t962x_android7.1红外遥控驱动浅析
  6. 第五章 创建高性能的索引
  7. [未读]CLR via C#(第4版)
  8. 2015.5.29日总结
  9. 【练习8.7】cvGoodFeaturesToTrack确定图像强角点、cvFindCornerSubPix亚像素级角点检测...
  10. The Second Assignment