невозможно установить сообщение об ошибке для проверки электронной почты - Zend-форма - PullRequest
1 голос
/ 25 июля 2010

Это странно. Я пытаюсь установить сообщение об ошибке для моего элемента проверки электронной почты в форме Zend. Другие поля работают правильно, но не электронная почта, что случилось?

кодовый бит:

$name = new Zend_Form_Element_Text('name');
        $name   ->setLabel('Name:')
                ->setRequired(true)
                ->addValidator('Alnum')
                ->addValidator('NotEmpty');
        $name    ->getValidator('NotEmpty')->setMessage('Please enter your name.');
        $name    ->getValidator('Alnum')->setMessage('Name can only contain letters and spaces.');

$email = new Zend_Form_Element_Text('email');
       $email   ->setLabel('Email:')
             ->setRequired(true)
                ->addFilter('StringToLower')
                ->addValidator('NotEmpty')
                ->addValidator('EmailAddress');

        $email  ->getValidator('NotEmpty')->setMessage('Please enter your email address.');
        $email  ->getValidator('EmailAddress')->setMessage('Email is not in proper format.');

Имя работает, но электронная почта не работает.

Я все еще получаю сообщение об ошибке по умолчанию: '' is no valid email address in the basic format local-part@hostname

Ответы [ 3 ]

6 голосов
/ 26 июля 2010

Вам необходимо указать тип сообщения:

$email->getValidator('emailAddress')->setMessage("'%value%' is not valid, use something like local-part@hostname",Zend_Validate_EmailAddress::INVALID_FORMAT);

Возьмите это как пример:

protected $_messageTemplates = array(
        self::INVALID            => "Invalid type given, value should be a string",
        self::INVALID_FORMAT     => "'%value%' is no valid email address in the basic format local-part@hostname",
        self::INVALID_HOSTNAME   => "'%hostname%' is no valid hostname for email address '%value%'",
        self::INVALID_MX_RECORD  => "'%hostname%' does not appear to have a valid MX record for the email address '%value%'",
        self::INVALID_SEGMENT    => "'%hostname%' is not in a routable network segment. The email address '%value%' should not be resolved from public network.",
        self::DOT_ATOM           => "'%localPart%' can not be matched against dot-atom format",
        self::QUOTED_STRING      => "'%localPart%' can not be matched against quoted-string format",
        self::INVALID_LOCAL_PART => "'%localPart%' is no valid local part for email address '%value%'",
        self::LENGTH_EXCEEDED    => "'%value%' exceeds the allowed length",
    );
0 голосов
/ 19 апреля 2013
$email_validate = new Zend_Validate_Email();
$neValidator = new Zend_Validate_NotEmpty();
$neValidator->setMessage('Please enter email.');
$emailaddress = new Zend_Form_Element_Text('EmailAddress');
$emailaddress->setRequired(true)
0 голосов
/ 09 ноября 2012

вам нужно создать собственный класс ошибок. В моем случае:

Я создал собственный класс проверки электронной почты в папке library / Zend / Validate

class Zend_Validate_Email extends Zend_Validate_Abstract
{

    const INVALID = 'Email is required';
    protected $_messageTemplates = array(
    self::INVALID => "Invalid Email Address",
   );

     public function isValid($value)
     {
         if(filter_var($value, FILTER_VALIDATE_EMAIL) === false) {
            $this->_error(self::INVALID);
            return false;
        } else {
            // We only check the presence of a dot on the domain part
            $components = explode("@", $value);
            $domain = $components[1];

            if (strpos($domain, ".") === false) {
                $this->_error(self::INVALID);
                return false;
            }

            return true;
        }
     }
}

и используется в моей форме как

$email_validate = new Zend_Validate_Email();

$neValidator = new Zend_Validate_NotEmpty();

$neValidator->setMessage('Please enter email.');

$emailaddress = new Zend_Form_Element_Text('EmailAddress');

$emailaddress->setRequired(true)

          ->setAttrib('size', '30')

          ->addFilter('StripTags')

          ->setAttrib('MaxLength',100)

          ->addValidator($neValidator,TRUE)

              ->addValidator($email_validate,TRUE)

          ->setAttrib('class','textbox')

          ->setDecorators($decorators);

Надеюсь, это поможет вам

...