使zend EmailAddress表单验证器只返回一个自定义错误消息

时间:2011-07-21 18:30:40

标签: php zend-framework validation

我正在创建一个像这样的电子邮件表单元素(在Zend表单中):

//create e-mail element
$email = $this->createElement('text', 'username')
              ->setLabel('E-mail:')
              ->setRequired(true)
              ->addFilters(array('StringTrim', 'StringToLower'))
              ->addValidator('EmailAddress', false, array(
                    'messages' => array(
                        Zend_Validate_EmailAddress::INVALID => 'Dit e-mail adres is ongeldig.',
                    )
              ));
//add element
$this->addElement($email);

现在,当输入无效的电子邮件时,会出现很多消息:

'#' is no valid hostname for email address '@#$@#'
'#' does not match the expected structure for a DNS hostname
'#' does not appear to be a valid local network name
'@#$' can not be matched against dot-atom format
'@#$' can not be matched against quoted-string format
'@#$' is no valid local part for email address '@#$@#'

我想知道,是否可以让它只发出我提供的错误信息,例如“请输入有效的电子邮件地址。”?

2 个答案:

答案 0 :(得分:5)

最简单的方法是使用addErrorMessage()为所有错误设置一条自定义消息。

在您的示例中,您可以将其添加到代码中并对其进行流畅调用,或添加行

$email->addErrorMessage('Dit e-mail adres is ongeldig.');

您还应该将第二个参数更改为addValidator,如下所示,一旦验证失败,则不会检查其他条件。

->addValidator('EmailAddress', true)

Reference Guide对此进行了解释,但不是很好。名称addErrorMessage并不意味着它会覆盖默认消息,但您确实存在。

答案 1 :(得分:1)

你可以使用:

$email->addErrorMessage('Dit e-mail adres is ongeldig.');

$email->addValidator('EmailAddress', true);

或者您可以使用:

$email_validate = new Zend_Validate_EmailAddress();

$email_validate->setMessage("Your custom message");

$email->addValidator($email_validate ,TRUE);