CakePHP Подтвердить только если поставляется - PullRequest
0 голосов
/ 24 июня 2011

В моей модели 'Members' я сравниваю, совпадает ли 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;
}

У меня есть много разных разделов моего сайта, которые позволяют редактировать участников.Некоторые разделы позволяют изменять пароли, а другие просто позволяют участникам редактировать свою биографию.

Однако, поскольку в форме нет поля password_confirm в форме, где пользователи редактируют свою биографию (например), проверку всегда возвращает false в любой форме, кроме форм, в которых присутствует password_confirm.

Существует ли эффективный способ проверки таким образом ...

"Сравнить пароль только с password_confirm толькоесли ключ password_confirm существует в массиве $data "

Я не смог бы найти его нигде на SO, надеюсь, я не повторяю существующий вопрос.

Спасибо!

Примечание.Я хочу убедиться, что поле не оставлено пустым, если оно существует в форме.

Ответы [ 2 ]

1 голос
/ 25 июня 2011

Вы ищете

'allowEmpty' => true

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

Поваренная книга ^^^

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

Некоторые обсуждения пустыхвалидационные испытания.НТН.

0 голосов
/ 24 июня 2011

Просто измените вашу функцию validate_passwords, верните true, если поле ['password_confirm'] не существует.

Если оно существует, сначала проверьте, действительно ли оно empty() (если так, верните false),

наконец, сделайте оставшуюся проверку, как сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...