CakePHP仅在提供时验证

时间:2011-06-24 15:58:19

标签: php validation cakephp passwords

在我的“会员”模型中,我正在通过此自定义验证密钥/功能对来比较password是否与password_confirm匹配。

...'password_confirm' => array(
        'compare'    => array(
            'rule'      => array('validate_passwords'),
            'message'   => 'The passwords you entered do not match.',
            'required'  => true
        ),

        'length' => array(
            'rule'      => array('between', 6, 20),
            'message'   => 'Your password must be between 6 and 20 characters.',
        ),

        'empty' => array(
            'rule'      => 'notEmpty',
            'message'   => 'The password field must not be left blank.',
        ),
    )...

function validate_passwords ...

function validate_passwords($data, $password_field = 'password', $hashed = true) {
    $password         = $this->data['Member']['password'];
    $password_confirm = $hashed ?
          Security::hash($data['password_confirm'], null, true) :
          $data['password_confirm'];
    return $password === $password_confirm;
}

我的网站有很多不同的部分,可以编辑成员。有些部分允许更改密码,而其他部分只允许成员编辑其生物。

但是,因为在用户编辑其bio的表单中没有password_confirm字段(例如),验证总是在任何表单上返回false ,而不是具有{{1的表单现在。

是否有一种有效的方式来验证......

“仅当password_confirm数组中存在password_confirm密钥时才将密码与password_confirm进行比较

我无法在任何地方找到这个,我希望我不会重复现有的问题。

谢谢!

NB。我希望确保该字段在表单中确实存在时不会留空。

2 个答案:

答案 0 :(得分:1)

您正在寻找

'allowEmpty' => true

http://book.cakephp.org/view/1148/allowEmpty

食谱^^^

http://ask.cakephp.org/questions/view/validation_difference_between_allowempty_flag_and_notempty_rule

关于空验证测试的一些讨论。 HTH。

答案 1 :(得分:0)

如果validate_passwords字段不存在,只需修改['password_confirm']函数即可返回true。

如果确实存在,请检查是否首先empty()(如果是,返回false)。

最后按照目前的状态进行剩余的检查。