美文网首页
掌握Thinkphp3.2.0----自动验证

掌握Thinkphp3.2.0----自动验证

作者: geeooooz | 来源:发表于2018-06-19 16:59 被阅读33次

自动验证是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,表示值不为空的时候验证。

附近规则:

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


image image

验证时间:

主要新增修改等验证。
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());
        }
    }
}

结果:

image

附加:

//附加规则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]);
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----自动验证

    自动验证是TP在create数据的时候,自动对数据进行验证。 TP提供了两种验证方式:静态验证($_validat...

  • podspec文件自动验证,手动验证

    自动验证: 但是自动验证不通过,确信代码无误可以手动验证。 手动验证: 本地clone,git上的私有仓库进入gi...

  • 表单验证

    自动验证:通过对元素使用属性(如pattern)的方法,可以实现在表单提交时执行的自动验证功能。 取消验证: ①利...

  • iOS 苹果内购-自动订阅处理 踩坑集

    1.自动订阅验证失败(21004) 自动订阅必须采用密码的方式才能进行验证;如果苹果验证返回21004的话,就加上...

  • 【Android 开发-kotlin】手机号验证登录demo

    运行效果 输入手机号,自动发送验证码 输入错误验证码自动清空 输入正确验证码自动跳转至其他页面 内容简概 一、搭建...

  • 掌握主动权,你已经成交了一半 直系亲属篇

    一、掌握自动贩卖乐成,贩卖职员积极、自动是必须的。自动开辟客户、自动与客户接洽、自动资助客户办理题目、攀谈时掌握自...

  • 短信API实现自动化短信发送

    短信验证码接口示例,如何接入短信API接口实现短信自动发送功能; 网站如何实现自动发送短信验证码的功能,短信验证码...

  • 接入短信API,免费试用

    短信验证码接口示例,如何接入短信API接口实现短信自动发送功能; 网站如何实现自动发送短信验证码的功能,短信验证码...

  • jQuery常用控件

    1、表单验证插件——validate validate插件自动根据规则进入验证,并显示提示信息,验证成功后,表...

  • 作业帮做-栈结构验证

    顺序栈操作验证 实验目的 掌握栈的顺序存储结构; 验证栈的操作特性; 掌握顺序栈的基本操作实现方法。 实验内容 建...

网友评论

      本文标题:掌握Thinkphp3.2.0----自动验证

      本文链接:https://www.haomeiwen.com/subject/phxzeftx.html