Установите одно сообщение об ошибке для поля электронной почты в Zend - PullRequest
5 голосов
/ 01 сентября 2011

У меня небольшая проблема с проверкой электронной почты в моей Zend-форме.

Мой код для поля электронной почты:

$emailId = new Zend_Form_Element_Text('email');
$emailId->setLabel("Email Adresse")
         ->addFilter('StripTags')
         ->addFilter('StringTrim')
         ->addValidator(new Validator_EmailValidator())
         ->addValidator('NotEmpty')
         ->addValidator(
                        'NotEmpty',
                        TRUE,
                        array('messages' => array(
                              'isEmpty' => 'Please enter your email id.'
                              )
                           )
                        );

В настоящее время сообщения об ошибках электронной почты отображаются как: enter image description here

Я хочу установить единственное сообщение об ошибке вместо всех этих ошибок , а это:

"'abcd @ shdsjah' не является действительным идентификатором электронной почты."

Поскольку я новичок в Zend Framework, я не очень разбираюсь в этом, хотя я пробовал какой-то код, но они бесполезны.

Пожалуйста, помогите .....

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

Ответы [ 3 ]

4 голосов
/ 01 сентября 2011

Когда я был новичком в Zend-Framework, я столкнулся с этой проблемой и нашел решение, используя метод setErrors () как:

//this will immediately call the method markAsError() which will show the error always
$emailId->setErrors(array('Please enter a valid Email Id.'));

Вы также можете попробовать:

//this will clearErrorMessages() and after that set the error messages 
$emailId->setErrorMessages(array("Please enter a valid Email Id."));

Напишите этот код после вашего кода.

Надеюсь, он будет вам полезен ......

1 голос
/ 01 сентября 2011

Передайте true как второй аргумент addValidator (breakChainOnFailure).Проверка остановится при первом сбое, и у вас будет только одно сообщение об ошибке.

0 голосов
/ 01 сентября 2011

Я вижу, что вы передаете свой собственный пользовательский валидатор.

->addValidator(new Validator_EmailValidator())

Тебе не нужно это делать. Просто используйте:

 $validator =  new Zend_Validate_EmailAddress()

Затем просто установите этот валидатор для элемента формы, а затем установите сообщения для этого валидатора.

So

 $emailId->setValidator( $validator );

Теперь просто установите сообщения для валидатора, используя метод setMessages.

Это все потенциальные сообщения, которые вы можете изменить:

    const INVALID            = 'emailAddressInvalid';
    const INVALID_FORMAT     = 'emailAddressInvalidFormat';
    const INVALID_HOSTNAME   = 'emailAddressInvalidHostname';
    const INVALID_MX_RECORD  = 'emailAddressInvalidMxRecord';
    const INVALID_SEGMENT    = 'emailAddressInvalidSegment';
    const DOT_ATOM           = 'emailAddressDotAtom';
    const QUOTED_STRING      = 'emailAddressQuotedString';
    const INVALID_LOCAL_PART = 'emailAddressInvalidLocalPart';
    const LENGTH_EXCEEDED    = 'emailAddressLengthExceeded';

Сообщение по умолчанию

protected $_messageTemplates = array(
        self::INVALID            => "Invalid type given. String expected",
        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",
    );

Теперь просто измените сообщения на то, что вы хотите. Вам нужно будет обновить каждое сообщение.

 $validator->setMessages(array(
    Zend_Validate_EmailAddress::INVALID            => "Invalid type given, value should be a string",
    Zend_Validate_EmailAddress::INVALID_FORMAT     => "'%value%' is no valid email address in the basic format local-part@hostname",
    Zend_Validate_EmailAddress::INVALID_HOSTNAME   => "'%hostname%' is no valid hostname for email address '%value%'",
    Zend_Validate_EmailAddress::INVALID_MX_RECORD  => "'%hostname%' does not appear to have a valid MX record for the email address '%value%'",
    Zend_Validate_EmailAddress::INVALID_SEGMENT    => "'%hostname%' is not in a routable network segment. The email address '%value%' should not be resolved from public network.",
    Zend_Validate_EmailAddress::DOT_ATOM           => "'%localPart%' can not be matched against dot-atom format",
    Zend_Validate_EmailAddress::QUOTED_STRING      => "'%localPart%' can not be matched against quoted-string format",
    Zend_Validate_EmailAddress::INVALID_LOCAL_PART => "'%localPart%' is no valid local part for email address '%value%'",
    Zend_Validate_EmailAddress::LENGTH_EXCEEDED    => "'%value%' exceeds the allowed length",
  ));
...