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 相关文章推荐
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
Jan 29 PHP
WindowsXP中快速配置Apache+PHP5+Mysql
Jun 05 PHP
40个迹象表明你还是PHP菜鸟
Sep 29 PHP
PHP中遍历stdclass object的实现代码
Jun 09 PHP
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
Jul 01 PHP
windows下zendframework项目环境搭建(通过命令行配置)
Dec 06 PHP
php中存储用户ID和密码到mysql数据库的方法
Feb 06 PHP
php二维数组用键名分组相加实例函数
Nov 06 PHP
PHP使用数组依次替换字符串中匹配项
Jan 08 PHP
Yii2 assets清除缓存的方法
May 16 PHP
PHP解析url并得到url参数方法总结
Oct 11 PHP
PHP strripos函数用法总结
Feb 11 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 学习提高路线分享
2011/10/23 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
php 函数中静态变量使用的问题实例分析
2020/03/05 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
JavaScript实现表格排序方法
2013/06/14 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
Javascript中的五种数据类型详解
2014/12/26 Javascript
jquery中map函数遍历数组用法实例
2015/05/18 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
vue+vux实现移动端文件上传样式
2017/07/28 Javascript
jQuery实现的页面弹幕效果【测试可用】
2018/08/17 jQuery
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
微信小程序—setTimeOut定时器的问题及解决
2019/07/26 Javascript
layui实现数据表格隐藏列的示例
2019/10/25 Javascript
利用vue3+ts实现管理后台(增删改查)
2020/10/30 Javascript
vue vant中picker组件的使用
2020/11/03 Javascript
[14:50]2018DOTA2亚洲邀请赛开幕式
2018/04/03 DOTA
[37:03]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第二场 12.16
2020/12/18 DOTA
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
Python3多线程操作简单示例
2018/05/22 Python
Python Pandas 获取列匹配特定值的行的索引问题
2019/07/01 Python
python多线程同步之文件读写控制
2021/02/25 Python
Python如何转换字符串大小写
2020/06/04 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
新闻网站实习自我鉴定
2013/09/25 职场文书
法学专业应届生求职信
2013/10/16 职场文书
搞笑的爱情检讨书
2014/10/01 职场文书
超市工作总结范文2014
2014/12/19 职场文书
求职简历自我评价怎么写
2015/03/10 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
中学教师读书笔记
2015/07/01 职场文书
python3 删除所有自定义变量的操作
2021/04/08 Python
Vue + iView实现Excel上传功能的完整代码
2021/06/22 Vue.js