ThinkPHP自动验证功能详解

ThinkPHP自动验证

ThinkPHP内置了数据对象的自动验证功能来进行模型的业务规则验证。大多数情况下,数据是由表单提交的$_POST数据创建。则使用系统的自动验证功能,只需要在Model类里面定义$_validate属性,它是由多个验证因子组成到得二维数组。

验证因子格式:

 代码如下 复制代码

protected $_validate = array(
  array(验证字段,验证规则,错误提示,[,验证条件][,附加规则][,验证时间])
);

实例(以注册时验证注册信息):

 代码如下 复制代码

class RegisterUser extends Model{
protected $_validate = array{
array('verify','require','验证码必须!'),    //默认情况下使用正则进行验证
array('name','','账号已存在!',0,'unique',1),    //在新增的时候验证name字段是否唯一
array('value',array(1,2,3),'值的范围不正确!',2,'in'),    //当值不为空的时候判断是否在一个范围内
array('repassword','password','密码不一致!',0,'confirm'),    //验证确认密码是否和密码一致
array('password','checkPwd','密码格式不正确!',0,'function'),    //自定义函数验证密码格式
};
}

当使用create方法创建数据对象时会自动进行数据验证(当POST提交表单处理时):

 代码如下 复制代码

$Register = D("RegisterUser");
if(!$Register->create()){
//如果创建失败,表示验证没有通过
exit($Register->gerError());
}else{
//验证通过,继续下一步操作
}

通常,数据的验证规则都是相对固定,但有些特殊情况下需要使用其他验证条件,这时我们就需要动态的改变验证规则来满足不同条件。
方法是在模块中使用create方法之前使用setProperty方法,如下(还是以上面注册实例):

 代码如下 复制代码

$Register = D("RegisterUser");
$validate = array(
array('verify','require','验证码必须!'),    //仅仅需要验证验证码
);
$Register->setProperty("_validate",$validate);
if(!$Register->create()){
//如果创建失败,表示验证没有通过
exit($Register->gerError());
}else{
//验证通过,继续下一步操作
}

批量验证

新版支持数据的批量验证功能,只要在模型类里面设置patchValidate属性为true(默认为false),设置批处理验证后,getError()方法返回的错误信息是一个数组,返回格式是:

 代码如下 复制代码

array("字段名1"=>"错误提示1","字段名2"=>"错误提示2"...)

thinkphp自动验证无效的问题

Action方法: IndexAction下的adds方法,D(“Liuyan”)获取post提交过来的内容,create()方法创建数据对象,D方法创建了数据对象才可以自动调用验证。

 

 代码如下 复制代码
   public function adds(){
        $ly=D("liuyan");
        $result=$ly->create();
 
        if($result){
            echo 'success';
            $ly->add();
        }
        else{
            exit($ly->getError());
        }   
    }

Model方法:

自动验证功能,加上$_validate属性,以数组的形式定义验证规则。

 代码如下 复制代码

class LiuyanModel extends Model{
    protected $_validate=array(
        array('ly_content','require','名字必填哦!','1'),
        array('ly_user','','帐号名称已经存在!',0,'unique',1),
    );
}

这样写的问题是,新增数据没有问题,但是不能自动调用验证功能,ThinkPHP的验证功能失效了。弄了半天,才知道,原因在于D(“Liuyan”)这样写才是对的,首字母大写

自动验证失败及解决方法

Action 事件

 代码如下 复制代码

/*
 * 登陆
 */
public function Login(){
 if($_POST['submit']){
  $DB = D('Login');//自定义Model处理
      //if里面就是ThinkPHP的自动验证了.
  if(!$DB->create()){
   $this->redirect('Index/Login', '', 3, '错误信息: '.$DB->getError().'<br/>系统将于3秒后返回重新登陆...');
  }else{
   $con['LoginName'] = $_POST['username'];
   $con['LoginPwd']  = md5($_POST['userpwd']);
   $list = $DB->where($con)->find();
   if(count($list)>0){
    echo 'ok';
   }else{
    $this->redirect('Index/Login', '', 3, '错误信息: 用户名或密码错误<br/>系统将于3秒后返回重新登陆...');
   }
  }
  return ;
 }
 //这里只是将模板文件的地址封装了一下.
 A('Public')->ShowPage('login');    
}

Model

 代码如下 复制代码

<?php
class LoginModel extends Model {
 // 设置数据表
 protected $tableName = 'admin';
 // 自动验证设置
 protected $_validate = array(
  array('username','require','用户名必须!', 1),
  array('userpwd','require','密码必须!', 1),
 );
 /* 自动填充 如果不能自动验证,将这段代码取消注释看看.
 protected $_auto = array(
  array('status','1',self::MODEL_INSERT),
  array('create_time','time',self::MODEL_INSERT,'function'),
 );*/
 /*引用ThinkPHP2.0开发手册:ThinkPHP手册类型检查只是针对数据库级别的验证,所以系统还内置了数据对象的自动验证功能来完成模型的业务规则验证,而大多数情况下面,数据对象是由表单提交的$_POST数据创建。需要使用系统的自动验证功能,只需要在Model类里面定义$_validate属性
 */
 /*它这里说了,只需要在Model类里面定义$_validate属性,但是在使用ThinkPHP2.1的时候,的的确确不能通过验证,$DB->getError()无错误原因返回,且刷新的时候$DB->getError()返回"令牌表单错误"
 */
}
?>

时间: 2024-09-29 12:44:24

ThinkPHP自动验证功能详解的相关文章

thinkPHP自动验证机制详解_php实例

本文实例讲述了thinkPHP自动验证机制.分享给大家供大家参考,具体如下: array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间]) 1.验证字段 需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如确认密码和验证码等等.有个别验证规则和字段无关的情况下,验证字段是可以随意设置的,例如expire有效期规则是和表单字段无关的. 2.验证规则 要进行验证的规则,需要结合附加规则,如果在使用正则验证的附加规则情况下,系统还内置了一些常用正则验证的

jQuery Validate验证框架详解

版本信息: /*! * jQuery Validation Plugin v1.14.0 * * http://jqueryvalidation.org/ * * Copyright (c) 2015 Jörn Zaefferer * Released under the MIT license */   一.导入js库 <script type="text/javascript" src="validate/jquery-1.6.2.min.js">&

jQuery Validate验证框架详解(推荐)_jquery

jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求. 一.导入js库 <script type="text/javascript" src="<%=path %>/validate/jquery-1.6.2.min.js"></script> <script type="text/javascript" src=&qu

ThinkPHP自动验证失败的解决方法

复制代码 代码如下: /* * 登陆 */ public function Login(){ if($_POST['submit']){ $DB = D('Login');//自定义Model处理 //if里面就是ThinkPHP的自动验证了. if(!$DB->create()){ $this->redirect('Index/Login', '', 3, '错误信息: '.$DB->getError().'<br/>系统将于3秒后返回重新登陆...'); }else{ $

ThinkPHP自动验证失败及解决方法

 /*  * 登陆  */ public function Login(){ if($_POST['submit']){ $DB = D('Login');//自定义Model处理     //if里面就是ThinkPHP的自动验证了. if(!$DB->create()){ $this->redirect('Index/Login', '', 3, '错误信息: '.$DB->getError().'<br/>系统将于3秒后返回重新登陆...'); }else{ $con[

10个实用的电脑运行命令功能详解

  10个实用的电脑运行命令功能详解 要使用命令操作,最基本的是先需要如何打开运行操作框,主要有2种方法: 1.最快捷方法:使用 Windows + R 组合快捷键,快速呼出命令操作窗口. 2.常用方法:点击桌面左下角的"开始"然后找到并点击打开→"运行". 使用方法,打开命令操作窗口后,只要输入输入命令,然后按回车键或点击"确定"即可允许命名,实现各种功能. 了解如何打开命名操作框之后,接下来就来分享一下实用的命令吧,使用命令可以实现很多功能,

MySQL的用户密码过期功能详解

MySQL的用户密码过期功能详解 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 先说明两个术语. Payment Card Industry,即支付卡行业,PCI行业表示借记卡.信用卡.预付卡.电子钱包.ATM和POS卡及相关的业务. PCI DSS,即PCI数据安全标准(Payment Card Industry Data Security Standard)是由PCI安全标准委员会制定,旨在使国际上采用一致的数

Bkh1.1.5建站系统功能概述与功能详解_常用工具

Bkh1.1.5功能详解 目录 一.    Bkh1.1.5建站系统功能概述.... 3 二.    注册用户功能详解.... 4 1.     注册用户功能概述... 4 2.     怎样注册成为一个站点的用户... 4 3.     登陆站点找到管理菜单... 5 4.     用户设置功能... 6 5.     我的文件库功能... 9 6.     我自己的站点... 9 7.     我加入的站点... 12 8.     我拥有的角色... 13 9.     我的博客... 1

DBGridEh(增强型表格组件)功能详解

DBGRIDEH 是Enlib 3.0组件包中的组件之一.Enlib 3.0组件包是一位俄国人为增强Borland系列开发工具功能而开发的第三方组件,它具有界面友好.功能强大.开发效率高..快速制作预览/打印简单中国式报表等特点.因此,一推出即受到广大Borland程序员的青睐.目前这个版本支持Borland Delphi versions 4,5,6&7 和 Borland C++ Builder versions 4 & 5 ,可极大地提高数据库应用系统客户端的性能.许多商品软件如&l