Php 使zend EmailAddress表单验证程序只返回一条自定义错误消息

Php 使zend EmailAddress表单验证程序只返回一条自定义错误消息,php,zend-framework,validation,Php,Zend Framework,Validation,我正在创建这样的电子邮件表单元素(在Zend表单中): 现在,当输入一封无效的电子邮件时,会出现很多消息: '#' 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 agains

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

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

'#' 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 '@#$@#'
我想知道,是否可以让它只发出我提供的错误消息,例如“请输入有效的电子邮件地址”。

最简单的方法是为所有错误设置一条自定义消息

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

$email->addErrorMessage('Dit e-mail adres is ongeldig.');
您还应该将第二个参数更改为addValidator,如下所示,以便在验证失败后不会检查其他条件

->addValidator('EmailAddress', true)
这在文章中有解释,但不是很好。名称
addErrorMessage
并不意味着它将覆盖默认消息,但您可以使用以下任一选项:

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

谢谢如果我将第二个参数设置为true,我应该设置什么消息?一般无效的那个?我会的。我认为我从来没有发现向用户展示他们的电子邮件地址为什么没有被验证是有用的。我通常只是说“请输入一个有效的电子邮件地址”或类似的话。我理解。我的问题更像是“如果触发了其他消息,而不是无效消息,该怎么办?”。在这种情况下,它将停止在第一个无效的消息,而不是显示我的自定义消息?我相信它将始终显示您的消息。如果不是这样的话(测试应该很容易),那么我就用您自己的字符串覆盖所有错误消息。addErrorMessage方法的问题是,它会删除您为该元素创建的任何其他自定义验证程序消息。例如,如果您在注册表单中进行了db查找,以查看该电子邮件地址是否已存在,您将希望显示该错误,而不是默认的无效电子邮件错误。我发现解决这个问题的唯一方法是覆盖引导中的默认电子邮件验证程序消息,并在失败时断开验证程序链。
$email_validate = new Zend_Validate_EmailAddress();

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

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