Zend_Validate_Abstract自定义验证程序未显示正确的错误消息

时间:2010-05-14 23:08:43

标签: zend-framework zend-validate

我在表单中有两个文本字段,我需要确保它们既没有空值也没有包含相同的字符串。

我编写的自定义验证程序扩展了Zend_Validate_Abstract并且正常工作,因为它传回了正确的错误消息。在这种情况下::isEmpty或isMatch。

但是,文档说使用addErrorMessages来定义要显示的正确错误消息。

在这种情况下,我已经附上

->addErrorMessages(array("isEmpty"=>"foo", "isMatch"=>"bar"));

到表单字段。

根据我读过的所有内容,如果我从isValid()返回“isEmpty”,我的错误信息应该是“foo”,如果我返回“isMatch”,那么它应该是“bar”。

我遇到的情况并非如此。如果我返回false是有效的,无论我设置$ this-> _error()是什么,我的错误消息显示“foo”,或者我在错误消息数组的索引[0]处的任何内容。

如果我没有定义errorMessages,那么我只是得到我传回给显示器的错误代码,我得到了正确的错误代码,具体取决于我传回的内容。

如何捕获错误代码并在表单中显示正确的错误消息?

我已经实现的修复,直到我正确地解决它,是将完整的消息作为自定义验证器的错误代码传回。这将适用于此实例,但错误消息特定于此页面,并不真正允许重复使用代码。

我已经尝试过的事情: 我已经尝试过验证器链接,以便我的自定义验证器只检查匹配项:

->setRequired("true")  
->addValidator("NotEmpty")  
->addErrorMessage("URL May Not Be Empty")  
->addValidator([*customValidator]*)  
->addErrorMessage("X and Y urls may not be the same")  

但同样,如果要么抛出错误,那么无论错误到底是什么,都会显示要设置的最后一条错误消息。

我不完全确定从哪里开始。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我认为你误解了手册。 It says

  

addErrorMessage($ message):添加一个   表单上显示的错误消息   验证错误。你可以这叫   不止一次,新的消息是   附加到堆栈。

     

addErrorMessages(array $ messages):add   要显示的多个错误消息   表单验证错误。

这些功能会将自定义错误消息添加到整个表单堆栈。

如果要在验证失败时显示验证错误消息,则必须在验证器中实现该消息。

const EMPTY = 'empty';

protected $_messageTemplates = array(
  self::EMPTY => "Value is required and can't be empty",
);

public function isValid($value)
{
  if(empty($value)) {
    $this->_error(self::EMPTY);
    return false;
  }

  return true;
}

这样,在验证失败后,您可以使用$validator->getErrors()获取错误代码,并使用$validator->getMessages()获取错误消息。

如果$_messageTemplates已正确定义,Zend_Form会自动使用错误消息而不是错误代码并将其打印出来。

希望这有帮助。