В Zend_Form, как избежать Zend_Validate_Email от генерации нескольких ошибок?

Я создаю приложение ZendFramework, которое, как форма входа в систему, запрашивает адрес электронной почты и пароль, казалось, имеет смысл проверить адрес электронной почты, прежде чем удалять базу данных с помощью попытки входа в систему, поскольку недопустимое электронное письмо никогда не приведет к допустимому удару. Zend_Validate_EmailAddress выглядел как правильный путь, но у меня возникла проблема с его созданием нескольких ошибок (вопрос внизу, после кода).

Моя форма в настоящее время имеет следующие

//WPMail_Form_Login::init() $email = $this->addElement('text', 'email', array( 'label'=>'Email', 'required'=>true, 'filters'=>array('stringtrim'), 'validators'=>array(array('emailaddress', true, array( 'messages'=>array( 'emailAddressInvalidHostname'=>'Your email address is invalid', 'emailAddressInvalidFormat'=>'Your email address is invalid', '...'=>'(repeat for all message templates)' ) ))), )); 

В контроллере я прямо передаю форму в представление:

 // WPMail_AuthController::loginAction() $this->view->form = $form; 

И, по мнению, это прямо echo'd:

 // views/scripts/auth/login.phtml <?php echo $this->form ?> 

Результат в настоящее время выглядит примерно так:

 - Your email address is invalid - 'asda!!!' does not match the expected structure for a DNS hostname - 'asda!!!' does not appear to be a valid local network name 

Я хочу знать: возможно ли настроить Zend _ Validate _ EmailAddress таким образом, чтобы он выдавал только одну ошибку с недопустимым адресом электронной почты? Под «configure» я имею в виду, не расширяя класс и не переопределяя логику своей собственной.

ТИА.

Zend Form Element имеет различные методы, которые можно использовать для настройки сообщений. Это не ужасно ясно из документов, но addErrorMessage () устанавливает одно настраиваемое сообщение об ошибке при неудачной проверке.

Поэтому ваш пример будет выглядеть так:

 $email = new Zend_Form_Element_Text('email'); $email->setLabel('Email') ->setRequired(true) ->addFilter('stringtrim') ->addValidator('emailAddress', true) ->addErrorMessage('Your email address is invalid'); $this->addElement($email); 

См. http://framework.zend.com/manual/en/zend.form.elements.html#zend.form.elements.validators.errors

Посмотрите этот урок Pádraic Brady на использование Zend_Form .

В частности, раздел «Шаг 4: Обработка сообщений об ошибках с помощью пользовательского декоратора».

Поскольку эти сообщения генерируются одним валидатором, я не думаю, что это возможно 🙁

Метод Zend_Validate_EmailAddress::isValid выполняет все проверки, так как генерирует ошибки в целом.

Одно «хакерское» решение состояло бы в том, чтобы итерации, в вашем контроллере, на ошибках и удалять все, кроме первого, для каждого поля, которое имеет более одного … Но мне не очень нравится звук этого. ,

Вы, конечно, могли бы наследовать, а не изменять поведение по умолчанию … Но вы заявили, что не хотите этого делать, поэтому …

Тем не менее, если я ошибаюсь, и есть способ, мне это очень любопытно 😉