Одно сообщение об ошибке вместо нескольких для Zend validator - PullRequest
1 голос
/ 17 мая 2011

У меня есть следующий элемент:

$email = new Zend_Form_Element_Text('email');
$email->setAttribs(array('class' => 'input-text', 'id' => 'email'))
        ->setLabel($this->view->translate('Email'))
        ->setValue(null)
        ->setRequired(true)
        ->addValidator(new Zend_Validate_EmailAddress())
        ->setDecorators($emailMessageDecorators);

Если в адресе электронной почты есть более одной ошибки, отображаются некоторые ошибки.Примерно так:

'fff.fgdf' is no valid hostname for email address 'as@fff.fgdf'
'fff.fgdf' appears to be a DNS hostname but cannot match TLD against known list
'fff.fgdf' appears to be a local network name but local network names are not allowed

Как мне установить только 1 сообщение?Я пробовал setMessage (строка), но он показывает 3 одинаковые ошибки.Благодарю.Извините за мой английский.Мир и любовь)

Ответы [ 5 ]

2 голосов
/ 18 мая 2011

Раньше мне приходилось делать специальный валидатор для этого:

/**
 * The standard email address validator with a single, simple message
 */
class App_Validate_EmailAddressSimpleMessage extends Zend_Validate_EmailAddress
{
    const COMMON_MESSAGE = 'Invalid email address';

    protected $_messageTemplates = array(
        self::INVALID            => self::COMMON_MESSAGE,
        self::INVALID_FORMAT     => self::COMMON_MESSAGE,
        self::INVALID_HOSTNAME   => self::COMMON_MESSAGE,
        self::INVALID_MX_RECORD  => self::COMMON_MESSAGE,
        self::INVALID_SEGMENT    => self::COMMON_MESSAGE,
        self::DOT_ATOM           => self::COMMON_MESSAGE,
        self::QUOTED_STRING      => self::COMMON_MESSAGE,
        self::INVALID_LOCAL_PART => self::COMMON_MESSAGE,
        self::LENGTH_EXCEEDED    => self::COMMON_MESSAGE,
    );

}

Затем вызывается с помощью:

$email->addValidator(new App_Validate_EmailAddressSimpleMessage());

Если вы просто хотите использовать тот же синтаксис, что и обычно:

$email->addValidator('EmailAddress');

но если он использует этот валидатор, тогда вы можете изменить имя класса / имени файла с EmailAddressSimpleMessage на просто EmailAddress и зарегистрировать префикс App_Validate_ с формой / элементами.

Еще лучше, вероятно, позволить этому классу принимать необязательный параметр конструктора для сообщения, которое вы хотите, но в то время я шел быстро и грязно.

2 голосов
/ 17 мая 2011

Если я правильно помню, вы можете вызвать setErrorMessages () для установки одного сообщения об ошибке в элементе формы вместо вызова setMessages () для каждого отдельного валидатора:

$form->addElement('password', 'password', array(
    'label' => 'New password:',
    'required' => true,
    'validators' => array(
        array('StringLength', false, 6),
        // more validators
    ),
    'errorMessages' => array('Invalid password.')
));
1 голос
/ 18 мая 2011

Это пример (надеюсь, это поможет):

$email = new Zend_Form_Element_Text('emailid');

$email->setLabel("Email-Adress :* ")
      ->setOptions(array('size' => 20))
      ->setRequired(true)
      ->addFilter('StripTags')
      ->addFilter('StringTrim')
      ->addValidator('EmailAddress')
      ->getValidator('EmailAddress')->setMessage("Please enter a valid e-mail address.");
0 голосов
/ 29 июля 2014

Вот ответ, используя $ breakChainOnFailure = true:

addValidator($nameOrValidator, $breakChainOnFailure = false, array $options = null);

Цитируется: http://framework.zend.com/manual/1.12/en/zend.form.elements.html#zend.form.elements.validators.errors

0 голосов
/ 29 июня 2011

Вы используете этот пример:

$email_validator = new Zend_Validate_EmailAddress();
$email = new Zend_Form_Element_Text('email');
$email->setRequired('true')
      ->setLabel('Email: ')
      ->setDecorators(array(array('ViewHelper'), array('Errors')))
      ->addValidator($email_validator);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...