`
bencode
  • 浏览: 109211 次
  • 性别: 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 的验证
分享到:
评论

相关推荐

    cakephp-1.2 manual

    9. **验证(Validation)**:手册会介绍如何在模型中设置数据验证规则,确保用户输入的数据符合要求。 10. **调试与性能优化**:学习如何使用 CakePHP 的调试模式进行问题排查,以及如何进行性能优化,如使用缓存和...

    CakePHP 1.2 API 中文文档

    **表单验证(Validation)** 在模型层,CakePHP 提供了强大的表单验证机制。开发者可以在模型中定义验证规则,确保输入数据的完整性和准确性。 **哈希与安全** CakePHP 1.2 包含了加密和哈希类,用于处理密码存储和...

    CakePHP v2.3.0.zip

    - **自动验证(Validation)**:对用户输入进行验证,确保数据质量。 - **哈希(Hash)和安全(Security)**:提供加密和安全功能,如密码哈希和防止SQL注入。 - **ORM(对象关系映射)**:通过ActiveRecord实现...

    cakephp-cakephp-2.0.0-beta-0-g402934f.zip

    9. **自动验证(Validation)**:提供了数据验证规则,确保输入数据的正确性和安全性。 10. **错误处理和日志记录**:优雅地处理异常,记录系统事件,便于调试和问题定位。 通过使用CakePHP,开发者可以快速构建...

    CakePHP创建验证器

    http://localhost:85/CakePHP/validation ``` 如果点击提交按钮而未填写任何内容,将会看到错误提示信息,如“我们需要用户名”、“我们需要密码”。如果填写了有效的电子邮件地址和密码,将不会显示任何错误信息。...

    CakePHP 框架模板 v2.02

    7. **Validation**:内置的数据验证机制,确保输入数据的有效性和安全性。 ### 三、版本2.02的特点 蛋糕PHP 2.02版本是2.x系列的一个稳定版本,它主要包含了以下改进和优化: 1. **性能提升**:针对2.x系列的性能...

    cakephp-ajax-validation:Cakephp ajax 验证插件

    Cakephp Ajax 验证Cakephp ajax 验证插件要求CakePHP >= 2.0 jQuery >= 1.7安装克隆/复制此目录中的文件到app/Plugin/AjaxValidation 通过调用CakePlugin::load('AjaxValidation');确保插件已加载到app/Config/...

    packtpub.CakePHP.1.3.Application.Development.Cookbook.Mar.2011

    学习 CakePHP 的核心组件,如路由(Routing)、模型关联(Associations)、数据验证(Validation)和数据库操作。 3. **创建模型**:学习如何定义数据模型,以及如何使用 CakePHP 的 Active Record 风格的 ORM...

    validation-masterPHP数据验证库.zip

     * @param \Cake\Validation\Validator $validator The validator to use when validating the entity.  * @return array  */  public function validate(Validator $validator); }验证...

    cakephp 初学

    表单验证(Form Validation)** 蛋糕PHP提供了内置的验证规则,用于确保用户输入的数据符合预期格式。学习如何定义和应用验证规则,能有效防止错误数据进入数据库。 **5. 视图助手(View Helper)** 视图助手是...

    cakephp-international-phone-validation:使用libphonenumber api从国家名称和电话号码验证和格式化电话号码。 对于作为后端框架的移动aps和cakephp的请求类型验证很有用

    使用国家名称和libphonenumber的cakephp-international-phone-validation ======================= 使用libphonenumber api从国家名称和电话号码验证和格式化电话号码。 对于作为后端框架的移动aps和cakephp的请求...

    CakePHP-1.2-Cheatsheet

    - **$validationErrors**: 验证错误集合。 - **$_schema**: 表结构。 #### 四、模型(Model)回调 模型回调允许在特定的时间点执行代码,例如: - **beforeDelete()**: 删除记录之前调用。 - **afterDelete()**: ...

    [只读] CakePHP的验证库。 此仓库是主要代码的一部分,可以在https://github.com/cakephp/cakephp中找到-PHP开发

    CakePHP验证库CakePHP...创建一个验证器很简单:使用Cake \ Validation \ Validator; $ validator =新的Validator(); $ validator-> requirePresence('email')-> add('email','validFormat',['rule'=>'email',

    OptimisticLock:CakePHP 行为插件为 RDBMS 实现乐观锁

    乐观锁CakePHP 行为插件为 RDBMS 实现乐观锁定。用法最简单的是,只需在您的模型中加载此行为。 class Post extends AppModel {public $ actsAs = array ( 'OptimisticLock.OptimisticLock' );} 您可以指定要比较的...

    cakephp:CakePHP:PHP快速开发框架-官方资料库

    通过Composer安装CakePHP ...$ composer require cakephp/cakephp 有关(最小/最大)PHP版本的详细信息,请参见。 运行测试 假设您使用介绍的方法之一在系统范围内安装了PHPUnit,则可以通过执行以下操作

    CakePHP框架Model函数定义方法示例

    7. **验证(Validation)**: 在Model中定义验证规则,可以确保输入数据的正确性。例如,`$this->validate->add('title', ['rule' => 'notEmpty'])`要求标题字段不能为空。 8. **事件(Events)**: CakePHP的...

    simple-validation:对表单或您能想到的任何事物进行验证的简单、快速、美观的方式

    有很多不同的方法可以对 php 上的表单进行验证,每个框架(Laravel 4+、... " frangeris/simple-validation " : " dev-master " } } 它符合 PSR-0,因此您也可以使用自己的自定义自动加载器。 用法 一般来说,每个

Global site tag (gtag.js) - Google Analytics