自动验证是TP在create数据的时候,自动对数据进行验证。

TP提供了两种验证方式:静态验证($_validate属性----自定义的模型的)和validate()方法

1.静态验证-----$_validate属性

总体的格式: 

 <?php
namespace Home\Model;
use Think\Model;
class UserModel extends Model{ protected $_validate = array(
array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
.......多个字段验证
);
}
?>

  验证字段----验证规则-----错误提示-----验证条件-----附加规则----验证时间

红色的是必选字段,黑色的是附加字段

验证字段:顾名思义,就是需要验证的字段

验证规则:系统内置或自定义的规则

错误提示:在验证失败的时候做出的返回的信息

验证条件:      

      1.self::EXISTS_VALIDATE 或 0,表示存在字段就验证(默认) ;
      2.self::MUST_VALIDATE 或 1,表示必须验证;
      3.self::VALUE_VALIDATE 或 2,表示值不为空的时候验证。

附近规则:

      配合验证规则使用,包括一下规则:

验证时间:

主要新增修改等验证。
1.self::MODEL_INSERT 或 1 新增数据时验证;
2.self::MODEL_UPDATE 或 2 编辑数据时验证;
3.self::MODEL_BOTH 或 3 全部情况下验证(默认)。

自动验证是从上到下以此验证,上面的错误,下面不会有错误信息返回

其实自动验证是很简单的,熟悉规则之后来看一下实例:

内置验证规则:

 模型
<?php
namespace Home\Model;
use Think\Model;
class UserModel extends Model{ //系统支持数据的批量验证功能,只需要在模型类里面设置patchValidate属性为true( 默认为false),
//设置批处理验证后,getError() 方法返回的错误信息是一个数组
protected $patchValidate = true;
protected $_validate = array( //为了便于模拟,我用的是验证条件是1,也就是在任何条件下都验证,其实所用的字段可能是不存在的
//是不能够创建数据的
//内置验证require不能为空
array('require','require','数据不能为空!',1),
//内置验证email,验证邮箱格式
array('email','email','邮箱格式不正确',1),
//内置验证url,验证网址
array('url','url','URL地址不正确',1),
//内置验证currency,验证货币
array('currency','currency','货币格式不正确',1),
//内置验证zip,验证邮编
array('zip','zip','邮政编码不正确',1),
//内置验证number,验证是不是正整数
array('number','number','不是正整数',1),
//内置验证integer,验证是不是整数
array('integer','integer','不是整数',1),
//内置验证double,验证是不是浮点数,正负均可
array('double','double','不是浮点数',1),
//内置验证english,验证是不是纯英文
array('english','english','不是纯英文',1),
);
}
?> 控制器: <?php
// 本类由系统自动生成,仅供测试用途
namespace Home\Controller;
use Think\Controller;
use Common\Model\UserModel;
class IndexController extends Controller { public function index(){ $user = D('User'); //用数组的方式模拟数据的提交
$data['require'] = '';
$data['email'] = 'sjdjjd';
$data['url'] = 'aaa';
$data['currency'] = '-1.2';
$data['zip'] = '123';
$data['number'] = -1;
$data['integer'] = -1.2;
$data['double'] = '21s';
$data['english'] = '12ee';
if($user->create($data)){
echo "验证成功!";
}else{
var_dump($user->getError());
}
}
}

结果:

附加:

 //附加规则regex,验证3-6位纯数字
array('user', '/^\d{3,6}$/', '不是 3-6 位纯正数字', 0, 'regex'),
//附加规则equal,验证是否和指定值相等
array('user', '李炎恢', '值不对等', 0, 'equal'),
//附加规则notequal,验证是否与指定值不等
array('user', '李炎恢', '值不能相等', 0, 'notequal'),
//附加规则confirm,验证两条字段是否相同
array('user', 'name', '两个用户名对比不同!',0,'confirm'),
//附加规则in,某个范围,可以是数组或逗号分割的字符串
array('user', array(1,2,3), '不在指定范围', 0, 'in'),
array('user', '张三,李四,王五', '不在指定范围', 0, 'in'),
//附加规则notin,某个范围,可以是数组或逗号分割的字符串
array('user', array(1,2,3), '不得在指定范围', 0, 'notin'),
array('user', '张三,李四,王五', '不得在指定范围', 0, 'notin'),
//附加规则length,验证长度或数字范围
array('user', '3', '不得小于 3 位', 0, 'length'),
array('user', '3,5', '不得小于 3 位,不得大于 5 位', 0, 'length'),
//附加规则between,验证某个范围,数字或逗号字符串
array('user', array(3,5), '必须是 3-5 之间的数字', 0, 'between'),
array('user', '3,5', '必须是 3-5 之间的数字', 0, 'between'),
//附加规则notbetween,验证某个范围,数字或逗号字符串
array('user', array(3,5), '必须不是 3-5 之间的数字', 0, 'notbetween'),
array('user', '3,5', '必须不是 3-5 之间的数字', 0, 'notbetween'),
//附加规则expire,设置有效期范围,必须是表单提交有效,可以是时间戳
array('user', '2014-1-10,2015-10-10', '时间已过期', 0, 'expire'),
//附加规则ip_deny,IP禁止列表
array('user', '127.0.0.1', '当前 IP 被禁止', 0, 'ip_deny'),
//附加规则ip_allow,IP允许列表
array('user', '127.0.0.1', '当前 IP 没有被允许', 0, 'ip_allow'),
//附加规则callback,回调验证
array('user', 'checkLength', '用户名必须在 3-5 位', 0, 'callback', 3,
array(3,5)),
//回调方法
protected n function checkLength($str,$min,$max) {
preg_match_all("/./u", $str, $matches);
$len = count($matches[0]);
if ($len < $min || $len > $max) {
return false;
} else {
return true;
}
}
//附加规则function,函数验证
array('user', 'checkLength', '用户名必须在 3-5 位', 0, 'function', 3,
array(3,5)),
//在 Common 文件夹下的 Common 文件夹建立 function.php 文件,会自动加载
function checkLength($str,$min,$max) {
preg_match_all("/./u", $str, $matches);
$len = count($matches[0]);
50 if ($len < $min || $len > $max) {
return false;
} e else {
n return true;
}
}
如果有多个字段都包含错误,默认只显示一个错误。如果想显示全部错误,可以设置属
性:
//批量验证
d protected $patchValidate = true;
如果是直接 POST 过来的,直接使用 create()方法即可。
//控制器create()方法自动调用验证
$user = D('User');
if ($user->create()) {
echo '所有数据验证成功!';
} else {
//输出错误信息
var_dump($user->getError());
}
PS:由于使用的 UserModel 模型类,所以必须是 D()方法实例化。
如果想把错误信息返回给ajax处理,可以是同ajaxReturn()方法返回JSON数据。
//返回JSON格式
$this->ajaxReturn($user->getError());
//1指定新增数据验证,2表示修改,
f if ($user->create($_POST,1)) {} //一般会自动判断

回调和函数是终极的自定义,还是很强大的

2.动态验证----动态验证就是把验证的规则放在控制器端,这样,在操作的时候比较灵活,缺点就是比较混乱。

 //动态验证
$rule = array(
array('user', 'require', '用户名不得为空'),
);
$user = M('User');
$data['user'] = '';
if ($user->validate($rule)->create($data)) {
echo '验证所有字段成功!';
} e else {
var_dump($user->geterror());
}

掌握Thinkphp3.2.0----自动验证的更多相关文章

  1. thinkphp3.2.3 自动验证 unique 出错的解决办法

    场景:修改数据时,唯一验证name字段出错,提示已存在. 排查: 1.传入的参数是否包含主键,因为 D('模型名')->create() 会自动判断是否是新增或者修改,根据传入的参数判断是否包含 ...

  2. thinkphp3.2.3 自动验证 正则验证

    <?php namespace Home1\Model; use Think\Model; class ShopYuyueInfoModel extends Model { // protect ...

  3. ThinkPHP3.1快速入门(12)自动验证

    自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 验证规则 数据验证可以进行数据类型.业务规则.安全判断等方面的验证操作.数据验证有两 ...

  4. ThinkPHP3.1.3分表状态时候的自动验证的代码BUG

    问题描述 ThinkPHP3.1.3 当使用TP的分库分表后 有些地方需要使用Model自动验证create,当验证唯一性unique会出现BUG, 具体描述 因为自动验证检测唯一性会使用隐式的使用f ...

  5. 2016/05/15 ThinkPHP3.2.2 表单自动验证实例 验证规则的数组 直接写在相应的控制器里

    使用TP 3.2框架 验证规则也可以写到模型里,但感觉有些麻烦, 一是有时候不同页面验证的方式会不一样, 二是看到这个   Add  事件里的代码,就清楚要接收什么数据,如何验证数据能够在第一眼有个大 ...

  6. ThinkPHP 自动验证与自动填充无效可能的原因(转)

    自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇到自动验证与自动填充无效的情况,本文就ThinkPHP 自动验证与自动填充无效可能的原因做一些分析. create() Think ...

  7. ThinkPhp 3.2 自动验证

    自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 数据验证有两种方式: 静态方式:在模型类里面通过$_validate属性定义验证规则 ...

  8. tp框架之自动验证表单

    tp框架的create自动加载表单的方法可以自动根据自己定义的要求来验证表单里面的内容,但是由于是在后台执行代码,会拖慢程序运行速度,所以还是建议通过前端js来进行判断,后台只进行数据库的查询以及传值 ...

  9. thinkphp表单自动验证

    ThinkPHP框架表单验证 对注册到test表的表单进行验证 在注册之前要对表单进行验证: 用户名非空验证,两次输入密码必须一致即相等验证,年龄在18~50之间即范围验证,邮箱格式正则验证. 自动验 ...

  10. thinkphp自动验证---$_validate

    thinkphp中的自动验证 array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间]) 1.验证字段 需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段 ...

随机推荐

  1. js自动更新时间+星期

    <div class="top_bar" id="cao" height="28px"><script> setIn ...

  2. Angular2 入门

    1. 说明 该文档为Angular2的入门文档,可以根据该文档的内如做出一个“helloworld”类型的Angualr2入门程序,通过该文档可以初步了解Angular2的相关知识以及开发流程,同时搭 ...

  3. Android笔记:异步消息处理

    1. Message Message 是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据.上一小节中我们使用到了Message 的what 字段,除此之外还可以使用arg1 ...

  4. Web前端发展前景及就业方向

    Web前端发展前景及就业方向 HTML5技术已经日趋成熟 Html5是移动互联网前端的主流开发语言,目前还没有一个前端的开发语言能取代 html5的位置,所以说,无论你是做手机网站还是在手机app应用 ...

  5. C#运算符

    运算符 1.算数运算符 赋值运算符 等号在C#中并不是表示相等的意思,而是表示赋值,把等号右边的值赋值给 等号左边的变量 由等号连接的表达式,叫做赋值表达式.我们要求等号两边的数据类型必须一 致. 2 ...

  6. rename

    重命名文件名: # rename hosts.conf.正式配值文件 hosts.conf.正式配置文件 hosts.conf.正式配值文件 [root@monitor- vhost]# ls hos ...

  7. ytu 1050:写一个函数,使给定的一个二维数组(3×3)转置,即行列互换(水题)

    1050: 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 154  Solved: 112[ ...

  8. Jetty使用教程(四:24-27)—Jetty开发指南

    二十四.处理器(Handler ) 24.1 编写一个常用的Handler Jetty的Handler组件用来处理接收到的请求. 很多使用者不需要编写Jetty的Handler ,而是通过使用Serv ...

  9. Ubuntu菜鸟入门(三)—— 无用软件卸载,wps等常用软件安装

    一  移除不需要的软件 sudo apt-get remove libreoffice-common sudo apt-get remove unity-webapps-common sudo apt ...

  10. java web.xml配置详解

    1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...