Когда вы вызываете $this->addElement()
из объекта Zend_Form, он возвращает сам объект формы, а не элемент, который вы только что создали.
Вы можете сделать одно из следующих изменений:
$this->addElement('text', 'email', ...);
$email = $this->getElement('email');
$email->addValidator(...);
// or
$email = new Zend_Form_Element_Text('email');
$email->addValidator(...)
->setLabel(...)
->setRequired(...);
$this->addElement($email);
Чтобы установить ваше сообщение об ошибке, я думаю, что вы должны сделать это вместо установки $ this -> _ message.
$this->_error(self::INVALID);
Поскольку, похоже, ваш класс только расширяет валидатор электронной почты Zend для переопределения сообщенияВы можете переопределить сообщения Zend, как это, и не нужно расширять класс.Это взято из валидатора в одном из моих проектов, поэтому игнорируйте лишние вещи и просто обратите внимание на сообщения для валидатора EmailAddress.
$this->addElement('text', 'email', array(
'label' => 'Email Address:',
'required' => false,
'filters' => array('StringTrim', 'StringToLower'),
'validators' => array(
array('EmailAddress', true, array(
'messages' => array(
Zend_Validate_EmailAddress::INVALID_FORMAT =>
"'%value%' is not a valid email address. Example: you@yourdomain.com",
Zend_Validate_EmailAddress::INVALID_HOSTNAME =>
"'%hostname%' is not a valid hostname for email address '%value%'"
)
)),
array('Db_RecordExists', true, array(
'table' => 'accounts', 'field' => 'email',
'messages' => array(
Zend_Validate_Db_RecordExists::ERROR_NO_RECORD_FOUND =>
"No account with that email address was found"
)
))
),
'decorators' => $this->elementDecorators
));