Zend Framework идентичный валидатор не работает - PullRequest
3 голосов
/ 29 июля 2011

У меня проблема с идентичным валидатором Zend Framework.У меня есть два элемента (пароль и проверка пароля), и я хочу убедиться, что они идентичны.Но идентичный валидатор у меня не работает.Токены всегда не совпадают:

class Form_MemberRegisterationForm extends Zend_Form
{
    public function init()
    {                
            $password = $this->createElement('password', 'password1');
        $password->setLabel('Password:');
        $password->setRequired(TRUE);
        $password->setAttrib('size', 30);
        $password->setErrorMessages(array ("isEmpty" => "Invalid Password!" ));
        $this->addElement($password);
        //      
        $confirmPswd = $this->createElement('password', 
            'confirmPassword');
        $confirmPswd->setLabel('Verify password:');
        $confirmPswd->setAttrib('size', 30);
        $confirmPswd->addValidator('identical', false, 
            array ('token' => 'password1' ));

        $this->addElement($confirmPswd);

Что я делаю не так?

Ответы [ 3 ]

4 голосов
/ 29 июля 2011

Ваш код правильный если ваша версия Zend Framework более 1.10.5.

Для более ранней версии попробуйте добавить валидатор в переопределенном методе isValid:

public function isValid($data)
{
    $this->getElement('passwordConfirm')->addValidator('identical', false, 
        array('token' => $data['password'])
    );
    return parent::isValid($data);
}
1 голос
/ 31 июля 2011

Пример кода верный, но он будет работать только в том случае, если ваша версия Zend Framework более 1.10.5, то есть когда была введена функция, позволяющая ссылаться на другие элементы формы с параметром токена.

Я предполагаю, что ваша версия ZF меньше 1.10.5?

Использование более современной версии ZF будет означать, что вам не нужно беспокоиться о переопределении методов isValid, и поможет сделать ваш код более понятным.

Объяснение от одного из разработчиков ZF здесь:

http://zfuniversity.com/tag/zend_validate_identical/

0 голосов
/ 29 июля 2011

попробуйте так

//password
$this->addElement('password', 'password', array('label' => 'Password', 'required' => true));

//password_confirm
$this->addElement('password', 'password_confirm', array('label' => 'Password Confirm', 'required' => true));
$this->password_confirm->addValidator('Identical', false, array('token' => 'password'));

P.S. контролирует, чтобы работать хорошо в форме isValid controller, потому что иначе вы никогда не будете отображать сообщения об ошибках! ;)

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