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

gau*_*kum 4 php validation cakephp

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

<?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'
            )
        )
    );
?>
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

dec*_*eze 8

几种方法:

  • 使用该on参数仅应用规则来创建更新操作.
  • unset 验证前模型中不需要的规则.

    unset($this->User->validate['password']);
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用自定义的验证方法是足够的智能来弄清楚他们是否应适用与否,例如通过检查$this->id$data['id']设置与否.除非你确定自己在做什么,否则不推荐.

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

    $this->User->save($this->data, true, array('only', 'certain', 'fields'));
    
    Run Code Online (Sandbox Code Playgroud)