`
bencode
  • 浏览: 107442 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

CakePHP Validation

    博客分类:
  • PHP
阅读更多
和Rails 一样,  CakePHP的Model也有Validation

它通过配置其 validate 数组, 就可以进行验证,  阅读了源码, 整理出 validate数组可能的结构, 以及验证的过程

1. 首先, 如果重写了 beforeValidate,  那么它先处理这里的东东... 以决定是否进行下一步验证

2. 然后才会根据 validate数组, 进行实际验证

var validate => array(
    ...
    fileldName => ruleSet
    ...
);

validate 数组大概是以上结构. 那么 ruleSet, 可能具有哪些情况呢?

ruleSet 可有三种情况:

1. string, 可以是正则式, 方法名, 或者...(见下面)
2. array('rule' => validator);    一个 key 为 rule 的单元素数组,
3. array(
    ...
    index => validator
    ...
)

第三种情况,是最复杂的, 第一第二种其实是第三种的特殊情况
它表示, 一个 field有很多个 validator, 需要通过所有 的 validator 才算通过

那么 validator 可以是什么呢?

1. string, 上面有过哦, 可以是正则式, 或者方法名 .. 或者...
2. array(    // 又是一个 array, 看来, 这个总的结构还可以真复杂呀
                   //  array中大概可以具有以下元素.
    'allowEmpty' => null,
    'required' => null,
    'rule' => 'blank',           //  这里有个 rule 哦...
    'last' => false,
    'on' => null

    'message' =>null         //   如果是空, 那么将被设置为:  This field cannot be left blank
)

好了.. 总结.   其实最复杂的结构像是这样的:

var validate => array(
    fileldName1 => ...
    fileldName2 => array{
           index1 => ...
            index2 => array(
               'allowEmpty' => null,
               'required' => null,
                'rule' => 'blank',           //  这里有个 rule 哦...
               'last' => false,
                'on' => null

                'message' =>null         //   如果是空, 那么将被设置为:  This field cannot be left blank
            )
            ...
    };
    ...
);


其他所有结构.都只不过是上面结构的特殊情形

程序在分析这个 validate 字段, 然后构造了上面这个结构. 下面就开始验证了. 其验证过程比较简单哦:

上面不是有 'on' 'allowEmpty' 这些字段吗?

那么第一步

1. 如果 empty(on) || (on == 'create' && !exists) || (on == 'update' && exists) 就进行验证

说白了. 就是 on 为空, 或者为 'create' 而且数据库中没有相关记录,  或者为 'update' 而且数据库中具有相关记录, 那么进行验证

所以, 我们验证的时候.可以在 网页上看到 debug信息,说是查询数据库用了多少毫秒(心里不知道怎么回事,明明没写什么find findAll)  原因就在这里.

2. 然后根据 allowEmpty 以及 required 信息, 进行空与非空验证,  如果通过这步, 再进行 3

3. 然后再根据 rule  进行验证

上面说了 rule 可以是 string(表示一个正则式, 或一个方法名), 但它其实还可以是一个 array

如果 rule 是一个 array, 那么  array[0] 这个元素, 就被作为 rule , 其余元素作为验证的参数

等等. 验证不是对表单输入的数据进行验证的话? 是的.  所以 data[fieldName]. 就是需要验证的东东.

所以. 最后. 验证参数, 是由两部分 combine 成的: 1. 表单值 2. rule 如果是 array. 除去第0个元素以外的其他元素

好了. rule 有了. 他是一个string. 验定参数也有了. 下面看看怎么验证

1. 首先找找. Model 中是否具有 string 同名的方法. 如果有. 调用它进行验证, 如果找不到. 见2
2. 再看看 Validation 对象中看看是否具有相关的方法, 如果有. 进行验证  如果找不到 见3
3. 如果是正则表达式,  验证

验证失败后, 函数还要设置 message: 代码是这样的:

if (!isset($validator['message'])) {
    if (is_string($index)) {
         $validator['message'] = $index;
     } else {
 $validator['message'] = ife(is_numeric($index) && count($ruleSet) > 1, ($index + 1), $message);
}

index 有什么用, 这下清楚了吧.

然后调用这个

$this->invalidate($fieldName, $validator['message']);

完成一个 field 的验证
分享到:
评论

相关推荐

    PHP的框架之CakePHP-CakePHP教程

    打包下载,里面有CakePHP的框架源码,下载后可直接使用,版本是1.1的,稳定版;CakePHP的分页组件源码;CakePHP的中文及英文教程,CHM格式;CakePHP的中文打印版教程,WORD格式,下载后可直接打印,方便的;CakePHP...

    cakephp php-framework

    There are two main ways to get a fresh copy of CakePHP. You can either download an archive copy (zip/tar.gz/tar.bz2) from the main website, or check out the code from the git repository. To download ...

    PHP的框架之CakePHP-CakePHP教程终极教程

    打包下载,里面有CakePHP的框架源码,下载后可直接使用,版本是1.1的,稳定版;CakePHP的分页组件源码;CakePHP的中文及英文教程,CHM格式;CakePHP的中文打印版教程,WORD格式,下载后可直接打印,方便的;CakePHP...

    CakePHP 3.4 开发手册文档 CakePHP Cookbook Documentation Release 3.4

    CakePHP 3.4 开发手册文档 CakePHP Cookbook Documentation Release 3.4

    cakephp 框架

    cakephp 框架 cakephp 框架 cakephp 框架 cakephp 框架 cakephp 框架

    Beginning CakePHP:From Novice to Professional

    Lead you from a basic setup of CakePHP to building a couple applications that will highlight CakePHPs functionality and capabilities without delving too deeply into the PHP language, but rather ...

    cakephp分页.docx

    cakephp分页,cakephp框架的分页的方法的文档,是cakephp框架的内容。

    CakePHP php框架 v3.7.0 beta1.zip

    在cakephp.org站点的Sites in the wild页面可以看到当前使用CakePHP框架的网站列表。 CakePHP 是一个运用了诸如ActiveRecord、Association Data Mapping、Front Controller和MVC等著名设计模式的快速开发框架。该...

    cakephp 框架书籍 英文版

    cakephp 框架书籍 英文版

    cakephp-2.2.4-0

    cakephp-2.2.4-0 稳定版框架

    CakePHP php框架 v3.7.8.zip

    在cakephp.org站点的Sites in the wild页面可以看到当前使用CakePHP框架的网站列表。 CakePHP 是一个运用了诸如ActiveRecord、Association Data Mapping、Front Controller和MVC等著名设计模式的快速开发框架。该...

    cakephp-1.3.21.zip

    cakephp-1.3.21.zip

    cakephp中acl详解

    cakephp中acl详解

    CakePHP php框架 v3.8.5

    在cakephp.org站点的Sites in the wild页面可以看到当前使用CakePHP框架的网站列表。CakePHP 是一个运用了诸如ActiveRecord、Association Data Mapping、Front Controller和MVC等著名设计模式的快速开发框架。该项目...

    CakePHP 3.5 开发手册文档 CakePHP Cookbook Documentation Release 3.5/共900页 PDF

    CakePHP 3.5 开发手册文档 CakePHP Cookbook Documentation Release 3.5/共900页 PDF

    cakephp-1.2 manual

    cakephp-1.2 manual 英文版,离线版。

    cakephp-containable行为behaviour

    2:cakephp中虽然对模型的操作方法中并没有提供像上面提到的连贯方法 但是cake框架提供了一个containable行为类来更好的完善模型关联中遇到的上述问题 ">1:thinkphp中通过框架提供的连贯操作Model >join ‘other ...

    cakephp框架源码

    cakephp框架源码cakephp框架源码cakephp框架源码cakephp框架源码cakephp框架源码cakephp框架源码cakephp框架源码cakephp框架源码cakephp框架源码

    Learn CakePHP(Apress,2ed,2016)

    You’ll learn about unit testing and how to implement it in CakePHP. This approach to coding leads to better code, better applications, and better programming habits. With this knowledge your ...

    CakePHP 框架模板 v2.02

    CakePHP是一个用PHP编写的开源Web应用框架,不过其模型是用Ruby on Rails设计的。作为PHP世界的Rails,CakePHP采纳了RoR的许多优秀特性,成熟度较高。

Global site tag (gtag.js) - Google Analytics