我在表单中有两个文本字段,我需要确保它们既没有空值也没有包含相同的字符串。
我编写的自定义验证程序扩展了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")
但同样,如果要么抛出错误,那么无论错误到底是什么,都会显示要设置的最后一条错误消息。
我不完全确定从哪里开始。
有什么建议吗?
答案 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
会自动使用错误消息而不是错误代码并将其打印出来。
希望这有帮助。