Для меня проблема не в том, что сообщения являются слишком техническими для обычного пользователя: это действительно побочная проблема, которую можно решить путем переопределения отдельных шаблонов сообщений.
Для меня фундаментальная проблема заключается в том, что этот валидатор по своей сути возвращает несколько сообщений, и нам нужно только одно сообщение.
Мне всегда приходилось прибегать к подклассификации стандартного валидатора:
class PapayaSoft_Validate_EmailAddress extends Zend_Validate_EmailAddress
{
protected $singleErrorMessage = "Email address is invalid";
public function isValid($value)
{
$valid = parent::isValid($value);
if (!$valid) {
$this->_messages = array($this->getSingleErrorMessage());
}
return $valid;
}
public function getSingleErrorMessage()
{
return $this->singleErrorMessage;
}
public function setSingleErrorMessage($singleErrorMessage)
{
$this->singleErrorMessage = $singleErrorMessage;
return $this;
}
}
Тогда использование выглядит следующим образом:
$validator = new PapayaSoft_Validate_Email();
$validator->setSingleErrorMessage('Your email is goofy');
$element->addValidator($validator, true);
В качестве альтернативы, используя краткую форму, вам нужно добавить новый префикс пространства имен для валидаторов, чтобы короткий ключ «EmailAddress» выбирался из нового пространства имен, отличного от Zend. Тогда:
$element->addValidator('EmailAddress', true, array(
'singleErrorMessage' => 'Your email is goofy',
));
Примечание: Хотя вопрос , отмеченный @ emaillenin , аналогичен, принятый ответ на самом деле не соответствует вашим требованиям. Он устанавливает одно сообщение об ошибке для поля , но похоже, что вам нужно иметь отдельные сообщения, приходящие от двух валидаторов (одно для формата электронной почты, другое для электронной почты- уже существует). Для этого мне кажется, что вам нужно изменить поведение самого валидатора EmailAddress
.