Странная проблема с Zend_Validate_Identical?

Я написал следующий код в своей форме Zend:

    $newpassword = new Zend_Form_Element_Password('newpassword');
    $newpassword->setLabel("Enter your New Password :")
                ->setRequired(true)
                ->addFilter('StripTags')
                ->addFilter('StringTrim')
                ->addValidator(
                     'NotEmpty',
                      TRUE,
                      array('messages' => array(
                              'isEmpty' => 'Please enter new password.'
                                               )
                           )
                     )
               ->addValidator(
                    'Alnum',
                     TRUE,
                     array('messages' => array(
                                 'alnumInvalid' => 'Please enter a valid new password.',
                                 'notAlnum' => 'Please enter a valid new password.',
                                 'alnumStringEmpty' => 'Please enter a valid new password.'
                                              )
                          )
                          )
               ->addValidator('StringLength', false, array(4, 25))
               ->getValidator('StringLength')->setMessage("Should be 4-25 characters long.");


    $retypepassword = new Zend_Form_Element_Password('retypepassword');
    $retypepassword->setLabel("Retype-Password :")
                   ->setRequired(true)
                   ->addFilter('StripTags')
                   ->addFilter('StringTrim')
                   ->addValidator(
                        'NotEmpty',
                        TRUE,
                        array('messages' => array(
                                         'isEmpty' => 'Please enter confirm password.'
                                                 )
                             )
                       )
                    ->addValidator(
                         new Zend_Validate_Identical('newpassword'),
                         TRUE,
                         array('messages' => array(
 'notSame' => 'New password and confirm password are not matching. They must be same.',
 'missingToken' => 'New password and confirm password are not matching. They must be same.'
                                                  )
                                           )
                                  )
              ->addValidator('StringLength', false, array(4, 25))
              ->getValidator('StringLength')->setMessage("Should be 4-25 characters long.");

Как видите, я переопределил сообщения об ошибках для Zend_Validate_Identical, то есть для notSame и missignToken, но форма по-прежнему показывает сообщение об ошибке по умолчанию. т.е. "Два заданных токена не совпадают"

Может кто-нибудь мне помочь.

Заранее спасибо...


person Pushpendra    schedule 19.11.2011    source источник


Ответы (1)


Параметр $options для Zend_Form_Element::addValidator полностью игнорируется, если вы передаете ему объект проверки (что вы делаете, передавая new Zend_Validate_Identical).

Вместо этого вы хотите сделать что-то похожее на то, как вы добавляли другие валидаторы:

$this->addValidator(
    'Identical',
    TRUE,
    array('token' => 'newpassword',
          'messages' => array(
              'notSame' => 'New password and confirm password are not matching. They must be same.',
              'missingToken' => 'New password and confirm password are not matching. They must be same.'
          )
    )
);
person John Flatness    schedule 19.11.2011
comment
Спасибо, Джон, это было действительно полезно. :) - person Pushpendra; 19.11.2011