代码之家  ›  专栏  ›  技术社区  ›  gautamlakum

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

  •  4
  • gautamlakum  · 技术社区  · 15 年前

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

    <?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 回复  |  直到 15 年前
        1
  •  8
  •   deceze    15 年前

    有几种方法:

    • 使用 on parameter 仅将规则应用于 创造 更新
    • unset 验证前来自模型的意外规则。

      unset($this->User->validate['password']);
      
    • 使用 custom validation methods 有足够的智慧来决定是否应该申请,例如通过检查 $this->id $data['id'] 是否已设置。除非你确定你在做什么,否则不推荐。

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

      $this->User->save($this->data, true, array('only', 'certain', 'fields'));
      
        2
  •  0
  •   klox    15 年前

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

    为了一个简单的方法来验证try jquery validation

        3
  •  0
  •   Chris Hawes    15 年前

    试试这个:

    <?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 .

    推荐文章