thinkphp自动验证中的静态验证和动态验证和批量验证

1.静态定义

在模型类里面预先定义好该模型的自动验证规则,我们称为静态定义。
举例说明,我们在模型类里面定义了$_validate属性如下:
class UserModel 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方法创建数据对象的时候自动调用:
$User = D("User"); // 实例化User对象
 if (!$User->create()){
    // 如果创建失败 表示验证没有通过 输出错误提示信息
    exit($User->getError());
 }else{
    // 验证通过 可以进行其他数据操作
 }

 在进行自动验证的时候,系统会对定义好的验证规则进行依次验证。如果某一条验证规则没有通过,则会报错,getError方法返回的错误信息(字符串)就是对应字段的验证规则里面的错误提示信息。 默认情况下,create方法是对表单提交的POST数据进行自动验证,如果你的数据来源不是表单post,仍然也可以进行自动验证,方法改进如下: 
$User = D("User"); // 实例化User对象
$data = getData(); // 通过getData方法获取数据源的(数组)数据
 if (!$User->create($data)){
    // 对data数据进行验证
    exit($User->getError());
 }else{
    // 验证通过 可以进行其他数据操作
 }  
一般情况下,create方法会自动判断当前是新增数据还是编辑数据(主要是通过表单的隐藏数据添加主键信息),你也可以明确指定当前创建的数据对象是新增还是编辑,例如:
$User = D("User"); // 实例化User对象
 if (!$User->create($_POST,1)){ // 指定新增数据
    // 如果创建失败 表示验证没有通过 输出错误提示信息
    exit($User->getError());
 }else{
    // 验证通过 可以进行其他数据操作
 }
 create方法的第二个参数就用于指定自动验证规则中的验证时间,也就是说create方法的自动验证只会验证符合验证时间的验证规则。 我们在上面提到这里的验证时间并非只有这几种情况,你可以根据业务需要增加其他的验证时间,例如,你可以给登录操作专门指定验证时间为4。我们定义验证规则如下: 
class UserModel extends Model{
  protected $_validate = array(
    array(‘verify‘,‘require‘,‘验证码必须!‘),  // 都有时间都验证
    array(‘name‘,‘checkName‘,‘帐号错误!‘,1,‘function‘,4),  // 只在登录时候验证
    array(‘password‘,‘checkPwd‘,‘密码错误!‘,1,‘function‘,4), // 只在登录时候验证
  );
 }

那么,我们就可以在登录的时候使用 
$User = D("User"); // 实例化User对象
 if (!$User->create($_POST,4)){ // 登录验证数据
    // 验证没有通过 输出错误提示信息
    exit($User->getError());
 }else{
    // 验证通过 执行登录操作
 } 
2.动态验证 

如果采用动态验证的方式,就比较灵活,可以根据不同的需要,在操作同一个模型的时候使用不同的验证规则,例如上面的静态验证方式可以改为:
$rules = 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‘), // 自定义函数验证密码格式
 );
$User = M("User"); // 实例化User对象
 if (!$User->validate($rules)->create()){
    // 如果创建失败 表示验证没有通过 输出错误提示信息
    exit($User->getError());
 }else{
    // 验证通过 可以进行其他数据操作
 } 
 错误信息多语言支持 如果你希望支持多语言的错误信息提示,那么可以在验证规则里面如下定义: 
protected $_validate = array(
    array(‘verify‘,‘require‘,‘{%VERIFY_CODE_MUST}‘),
    array(‘name‘,‘‘,‘{%ACCOUNT_EXISTS}‘,0,‘unique‘,1),
 );
其中VERIFY_CODE_MUST和ACCOUNT_EXISTS是我们在语言包里面定义的多语言变量。 如果是采用动态验证方式,则比较简单,直接在定义验证规则的时候使用L方法即可,例如: 
$rules = array(
    array(‘verify‘,‘require‘,L(‘VERIFY_CODE_MUST‘)),
    array(‘name‘,‘‘,L(‘ACCOUNT_EXISTS‘),0,‘unique‘,1),
 ); 
3.批量验证 

系统支持数据的批量验证功能,只需要在模型类里面设置patchValidate属性为true( 默认为false), protected $patchValidate = true; 设置批处理验证后,getError() 方法返回的错误信息是一个数组,返回格式是:
array("字段名1"=>"错误提示1","字段名2"=>"错误提示2"... )

 前端可以根据需要需要自行处理,例如转换成json格式返回:
$User = D("User"); // 实例化User对象
 if (!$User->create()){
    // 如果创建失败 表示验证没有通过 输出错误提示信息
    $this->ajaxReturn($User->getError());
 }else{
    // 验证通过 可以进行其他数据操作
 }

 
时间: 2024-12-09 22:43:16

thinkphp自动验证中的静态验证和动态验证和批量验证的相关文章

(转)HelloWorld CMake CMake中构建静态库与动态库及其使用

继续完善Hello World,建立它的共享库, 包括静态库和动态库. 本节的任务: 1,建立一个静态库和动态库,提供HelloFunc函数供其他程序编程使用,HelloFunc 向终端输出Hello World字符串. 2,安装头文件与共享库. 3, 编写一个程序使用创建的共享库(静态库和动态库). cd /home/ccj/CMakeDemo mkdir t3   cd /backup/cmake/t3 mkdir lib   在t3目录下建立CMakeLists.txt,内容如下: PRO

HelloWorld CMake Demo 03:CMake中构建静态库与动态库及其使用

? 继续完善Hello World,建立它的共享库, 包括静态库和动态库. ? 本节的任务: 1,建立一个静态库和动态库,提供HelloFunc函数供其他程序编程使用,HelloFunc 向终端输出Hello World字符串. 2,安装头文件与共享库. 3, 编写一个程序使用创建的共享库(静态库和动态库). ? 一,准备工作: 在/home/ccj/CMakeDemo目录建立t3目录,用于存放本节涉及到的工程. cd /home/ccj/CMakeDemo mkdir t3 ? 二,建立共享库

iOS 中的静态库与动态库,区别、制作和使用

如果我们有些功能要给别人用,但是又不想公开代码实现,比如高德地图.第三方登录分享等等,这时候我们就要打包成库了.库分静态库和动态库两种: 静态库:以.a 和 .framework为文件后缀名.动态库:以.tbd(之前叫.dylib) 和 .framework 为文件后缀名. 静态库与动态库的区别 静态库:链接时会被完整的复制到可执行文件中,被多次使用就有多份拷贝.动态库:链接时不复制,程序运行时由系统动态加载到内存,系统只加载一次,多个程序共用(如系统的UIKit.framework等),节省内

Linux学习笔记7——linux中的静态库和动态库

一.静态库的编译 静态库的编译过程如下: 1.编译成目标文件 这里有一个可选项-static,调用格式:gcc -c -static 代码文件名.c 2.归档成静态库 A.归档的工具是ar工具,使用ar -r可以将文件归档成静态库,调用格式:ar -r 静态库文件 被归档的文件 例如:我们这有两个C文件,分别为test1.c和test2.c 首先我们将它编译成目标文件:gcc -c -static test1.c gcc -c -static test2.c 此时会产生两个文件,分别为test1

【Linux 相关】 静态库与动态库的编译和使用

参考博客 http://www.cnblogs.com/feisky/archive/2010/03/09/1681996.html 上述博客中关于静态库与动态库的讲解,很清晰! 库的定义: 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 静态库和动态库的区别 1. 静态函数库 这类库的名字一般是libxxx.a:利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数

thinkphp自动验证

1.thinkphp的自动验证 自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 1.1应用范围: 进行数据类型.业务规则.安全判断等方面的验证. 1.2验证方式: 1.静态方式:在模型类里面通过$_validate属性定义验证规则. 2.动态方式:使用模型类的validate方法动态创建自动验证规则. 1.3验证规则: 例:一个简单的注册信息时的自动验证: <?php namespace Home\Model; use Thin

ThinkPHP 自动验证与自动填充无效可能的原因

原文链接:http://www.5idev.com/p-thinkphp_validate_auto_Invalid.shtml 自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇到自动验证与自动填充无效的情况,本文就ThinkPHP 自动验证与自动填充无效可能的原因做一些分析. create() ThinkPHP 自动验证与自动填充是在创建数据对象 create() 时实现的,因此自动验证与自动填充无效很大程度上与 create() 有关. create 方法语法如下: c

ThinkPHP 自动创建数据、自动验证、自动完成详细例子介绍(十九)

原文:ThinkPHP 自动创建数据.自动验证.自动完成详细例子介绍(十九) 1:自动创建数据 //$name=$_POST['name']; //$password=$_POST['password'];  ---这个注册页面传过来的POST值 下面用了自动穿件create方法就可以不用这个,会行动绑定 $user =M('User'); $User->create();   //会将传过来的$_POST数据对应到数据库的字段 $user->add();   //就可以直接写入 2:自动验证

Thinkphp自动验证规则

其实说白了,这篇文章就是转给自己看的,省的下次用的时候满网络找了.有需要的同学也可以看看.自动验证是非常有用的一个技术.平常的验证基本就是,用户名是否为空,用户名是否重复,密码,重复密码是否一致.官方给的就是这些.那么我们不可能只用到这些,铁定还有别的规则,所以下面这些规则供同学借鉴,也供我自己借鉴. array(‘name’,’/^[a-z]\w{3,}$/i’,’名字不符合要求!’);array(‘password’,’/^[a-z]\w{6,30}$/i’,’密码不符合要求!’);arra