一条错误消息,而不是Zend验证器的几条错误消息


One error message instead of few for Zend validator

我有下一个元素:

$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个相同的错误。谢谢。对不起我的英语。和平与爱)

过去,我必须为此制作一个自定义验证器:

/**
 * 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_注册到表单/元素。

更好的可能是允许这个类接受你想要的消息的可选构造函数参数,但当时我又快又脏。

如果我没记错的话,你可以调用setErrorMessages()在表单元素上设置一个错误消息,而不是在每个单独的验证器上调用setMessages():

$form->addElement('password', 'password', array(
    'label' => 'New password:',
    'required' => true,
    'validators' => array(
        array('StringLength', false, 6),
        // more validators
    ),
    'errorMessages' => array('Invalid password.')
));

这是一个例子(我希望它有帮助):

$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.");
以下是

答案,通过使用 $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

使用此示例:

$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);