CakePHP:"密码"和" password_repeat"更新时可以为空

时间:2014-08-16 11:16:30

标签: validation cakephp passwords cakephp-2.3 change-password

我的情况是这样的:我有两个字段用于用户的密码,“password”和“password_repeat”。

在创建(添加用户)时,必须明确填写这两个字段 相反,在更新(编辑用户)时,字段可以保留为空(因此用户的密码可以保持不变)。但是如果填写了“密码”字段,则必须填写“password_repeat”字段。

现在我用这种方式解决了它似乎有效:

public $validate = array(
        'password' => array(
            'minLengthOnCreate' => array(
                'allowEmpty'    => FALSE,
                'message'       => 'Must be at least %d characters',
                'on'            => 'create',
                'rule'          => array('minLength', 8)
            ),
            'minLengthOnUpdate' => array(
                'allowEmpty'    => TRUE,
                'message'       => 'Must be at least %d characters',
                'on'            => 'update',
                'rule'          => array('minLength', 8)
            )
        ),
        'password_repeat' => array(
            'passwordsMatchOnCreate' => array(
                'allowEmpty'    => FALSE,
                'message'       => 'Passwords don\'t match',
                'on'            => 'create',
                'rule'          => 'passwordsMatch'
            ),
            'passwordsMatchOnUpdate' => array(
                'allowEmpty'    => TRUE,
                'message'       => 'Passwords don\'t match',
                'on'            => 'update',
                'rule'          => 'passwordsMatch'
            )
        )
    );

这样,“创建”需要两个字段,而“更新”则不需要 现在我不喜欢这个,因为我认为有一种方法可以做得更好。

但这还不够:在“更新”时,如果填写了“密码”字段,则“password_repeat”字段可以留空。 所以我补充说:

public function beforeValidate($options = array()) {
        if(!empty($this->data[$this->alias]['password']) && isset($this->data[$this->alias]['password_repeat']))        
            $this->validator()->getField('password_repeat')->getRule('passwordsMatchOnUpdate')->allowEmpty = FALSE;

        return TRUE;
    }

而且我也很喜欢。 但似乎一切都运作良好。

建议?

0 个答案:

没有答案