Проблема с проверкой zend на элементе формы zend

Раньше у меня был этот элемент формы для проверки электронной почты и отображения сообщения об ошибке, если формат был недопустимым:

  $email_users = new Zend_Form_Element_Text('email_users');
  $email_users->setLabel('Email:')
                      ->setRequired(false)
                      ->addFilter('StripTags')
                      ->addFilter('StringTrim')
                      ->addValidator('EmailAddress')
                      ->setErrorMessages(array('messages' => 'Invalid Email'));

setErrorMessages работал нормально, потому что это была единственная проверка, которая мне была нужна, поэтому он заменил все сообщения об ошибках на мои собственные, теперь мне пришлось добавить еще одну проверку, чтобы увидеть, существует ли она уже в моей БД:

  $email_users = new Zend_Form_Element_Text('email_users');
  $email_users->setLabel('Email:')
                      ->setRequired(false)
                      ->addFilter('StripTags')
                      ->addFilter('StringTrim')
                      ->addValidators(array(
                          array('EmailAddress', true,
                              array(
                                  'messages' =>
                                      array(Zend_Validate_EmailAddress::INVALID => 'Invalid Email')
                                  )
                          ),
                          array('Db_NoRecordExists', true,
                              array(
                                  'messages' =>
                                    array(Zend_Validate_Db_NoRecordExists::ERROR_RECORD_FOUND => 'Email already exists'),
                                  'table' => 'users',
                                  'field' => 'email_users')
                          )));

Функциональность в порядке, проблема в том, что, когда адрес электронной почты недействителен, он теперь показывает мне сообщения проверки zend по умолчанию, но, когда он существует, он показывает мне мое настраиваемое сообщение. Есть ли способ таким образом заархивировать предыдущую функциональность? (Замена всех недействительных сообщений электронной почты) Я не могу использовать setErrorMessages, так как это показывает мне «недопустимый адрес электронной почты», когда адрес электронной почты существует.

Я попытался использовать 'messages' => 'Ошибка', но ничего не произошло (ошибок нет, но отображаются сообщения по умолчанию), я попробовал:

$ emailValidator = новый Zend_Validate_EmailAddress (); $ emailValidator-> setMessages ('Неверный адрес электронной почты');

И в моем элементе формы я добавил

$ email_users-> addValidator ($ emailValidator)

Ничего подобного. Ближайшее, что я получил, это 'messages' => array (Zend_Validate_EmailAddress :: INVALID_FORMAT => 'Invalid email'), это показывает сообщение, когда я набираю что-то вроде 'email @' или 'email', но если я набираю 'email @ host 'он показывает мне 3 ошибки относительно имени хоста, DNS и локальной сети, которые они не показывают, когда я использую setMessages (' Error ') (просто отображает' Error '),

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


person Javier Villanueva    schedule 21.10.2010    source источник


Ответы (2)


Я опубликовал ответ, в котором объясняется, как здесь работают все различные функции настройки сообщений об ошибках,

валидаторы Zend и сообщения об ошибках: addValidator и addErrorMessage

Короче, попробуйте это:

'messages' => 'Email already exists'

вместо использования массива.

person Adrian Schneider    schedule 21.10.2010
comment
Привет, Адриан, я обновил свой вопрос результатами, полученными на основе вашего сообщения - person Javier Villanueva; 22.10.2010
comment
Похоже, что метод messages = string не работает, потому что валидатор EmailAddress переопределяет его, чтобы передать часть проверки валидатору Hostname. Однако работает для всех (большинства?) Других валидаторов. - person Adrian Schneider; 22.10.2010

Вы должны написать такой валидатор ..

$email_users->addValidator(
    'EmailAddress', 
    true, 
    array( 'messages' => array( 'emailAddressInvalidFormat' => "Email Address is Not Valid... !<br>", "emailAddressInvalidHostname"=>"Email Address is Not Valid... !<br>", "hostnameUnknownTld"=>"Email Address is Not Valid... !<br>","hostnameLocalNameNotAllowed"=>"Email Address is Not Valid... !<br>") )
);

Во всех случаях неверного адреса электронной почты должна отображаться ошибка «Адрес электронной почты недействителен ...!».

person Nilesh Gupta    schedule 13.02.2013