cakephp Пользовательское сообщение с правилом проверки - PullRequest
5 голосов
/ 22 октября 2010

У меня есть пользовательское правило проверки, чтобы проверить, являются ли два введенных пароля одинаковыми, и если они не совпадают, я хочу получить сообщение «Пароли не совпадают».

Правило работает, однако, когда пароли не совпадают, оно просто отображает обычное сообщение об ошибке, что происходит?

var $validate=array(
        'passwd2' => array('rule' => 'alphanumeric',
                        'rule' => 'confirmPassword',
                        'required' => true,
                        'allowEmpty'=>false));

function confirmPassword($data)
{
    $valid = false;
    if ( Security::hash(Configure::read('Security.salt') .$data['passwd2']) == $this->data['User']['passwd'])
    {
        $valid = true;
        $this->invalidate('passwd2', 'Passwords do not match');
    }
    return $valid;
}

Там написано "Это поле нельзя оставлять пустым"

EDIT:

Странно то, что если я оставляю одно из полей пароля пустым, оба сообщения об ошибках говорят: «Это поле нельзя оставить пустым»

Тем не менее, если я добавлю что-то в оба, то это правильно говорит: «Пароли не совпадают»

Ответы [ 3 ]

6 голосов
/ 23 октября 2010

Я думаю, вы сделали это слишком сложным.Вот как я это делаю:

    // In the model
    public $validate = array(
        'password' => array(
            'minLength' => array(
                'rule' => array('minLength', '8')
            ),
            'notEmpty' => array(
                'rule' => 'notEmpty',
                'required' => true
            )
        ),
        'confirm_password' => array(
            'minLength' => array(
                'rule' => array('minLength', '8'),
                'required' => true
            ),
            'notEmpty' => array(
                'rule' => 'notEmpty'
            ),
            'comparePasswords' => array(
                'rule' => 'comparePasswords' // Protected function below
            ),
        )
    );
    protected function comparePasswords($field = null){
        return (Security::hash($field['confirm_password'], null, true) === $this->data['User']['password']);
    }

// In the view
echo $form->input('confirm_password', array(
    'label' => __('Password', true),
    'type' => 'password',
    'error' => array(
        'comparePasswords' => __('Typed passwords did not match.', true),
        'minLength' => __('The password should be at least 8 characters long.', true),
        'notEmpty' => __('The password must not be empty.', true)
    )
));
echo $form->input('password', array(
    'label' => __('Repeat Password', true)
));
3 голосов
/ 22 октября 2010

Вы должны использовать ключ 'message' в вашем массиве $ validate, чтобы указать сообщение:

'message' => 'Your passwords do not match'

Дальнейшее чтение: http://book.cakephp.org/view/1143/Data-Validation

0 голосов
/ 18 мая 2011

И затем вы можете получить доступ к полям и сообщениям с помощью $ this-> modelName-> invalidFields (), которая вернет вам поля, которые не прошли проверку, и сообщение, которое вы для них установили ...

В контроллере я имею в виду ...

http://book.cakephp.org/view/1182/Validating-Data-from-the-Controller

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