cakephp:如何在模型中为不同的操作设置多个验证?

时间:2010-11-02 06:44:04

标签: php cakephp validation

我有一个用户模型。在其中,我设置了注册用户时使用的验证。这很好。但是当用户编辑他的个人资料信息时,我不想验证一些字段,如密码,电子邮件等。怎么可能。下面是代码。

<?php
class User extends AppModel{

    var $name = 'User';

    // used when user registers
    var $validate = array(

        'login' => array(
            'minLength' => array(
                'rule' => array('minLength', '6'),
                'field' => 'login', 
                'message' => 'mimimum 6 characters long'
                )
        ),
        'password' => array( // don't want to validate in edit profile page
            'minLength' => array(
                'rule' => array('minLength', '6'),
                'field' => 'password',
                'message' => 'minimum 6 characters long'
                )
        ),
        'email' => array(
            array(
            'rule' => 'email',
            'message' => 'please enter a valid email address'
            )
        )
    );
?>

当我注册用户时使用上面的内容。但是当用户编辑他的个人资料时,我不允许编辑/更改用户密码。因此,每次编辑配置文件时,它都会检查密码验证。我没有在编辑个人资料页面中添加密码字段,我不想验证密码字段。那么我可以为不同的操作设置不同的验证规则吗?

感谢。

3 个答案:

答案 0 :(得分:8)

有几种方法可以做到这一点:

  • 使用on parameter仅将规则应用于创建更新操作。
  • unset验证前模型中不需要的规则。

    unset($this->User->validate['password']);
    
  • 使用足够聪明的custom validation methods来确定它们是否应该适用,例如:通过检查是否设置了$this->id$data['id']。除非你确定自己在做什么,否则不推荐使用。

  • 使用save method$fieldlist参数将保存和验证仅限制到指定字段。不在列表中的字段既不会保存也不会被验证。非常推荐,因为它还可以防止形式欺骗。

    $this->User->save($this->data, true, array('only', 'certain', 'fields'));
    

答案 1 :(得分:0)

直到这个:

var $validate = array(

        'login' => array(
            'minLength' => array(
                'rule' => array('minLength', '6'),
                'field' => 'login', 
                'message' => 'mimimum 6 characters long'
                )
        ),

有一种验证try jquery validation的简单方法。

答案 2 :(得分:0)

试试这个:

<?php
class User extends AppModel{

    var $name = 'User';

    // used when user registers
    var $validate = array(

        'login' => array(
            'minLength' => array(
                'rule' => array('minLength', '6'),
                'field' => 'login', 
                'message' => 'mimimum 6 characters long'
                )
        ),
        'password' => array( // don't want to validate in edit profile page
            'minLength' => array(
                'rule' => array('minLength', '6'),
                'field' => 'password',
                'message' => 'minimum 6 characters long',
                'on' => 'create' //Only perform validation when creating a new record.

                )
        ),
        'email' => array(
            array(
            'rule' => 'email',
            'message' => 'please enter a valid email address'
            )
        )
    );
?>

请注意验证数组中的新行以获取密码。

Cookbook中记录了这一点。

相关问题