1

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

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

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

在这种情况下,我附上了

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

到表单域。

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

这不是我遇到的情况。如果我从有效返回 false,无论我将 $this->_error() 设置为什么,我的错误消息都会显示“foo”,或者我在错误消息数组的 index[0] 处的任何内容。

如果我没有定义errorMessages,那么我只会得到我为显示传回的错误代码,我会得到正确的错误代码,这取决于我传回的内容。

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

在我正确解决之前,我已经实施的修复是将完整消息作为错误代码从自定义验证器传回。这将在这种情况下起作用,但错误消息是特定于该页面的,并且实际上不允许重用代码。

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

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

但同样,如果其中任何一个引发错误,则将显示最后一个要设置的错误消息,而不管错误到底是什么。

我不完全确定从这里去哪里。

有什么建议么?

4

1 回答 1

2

我认为你误解了手册。它说

addErrorMessage($message):添加错误消息以显示表单验证错误。您可以多次调用它,新消息将附加到堆栈中。

addErrorMessages(array $messages):添加多条错误消息以显示在表单验证错误上。

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

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

IE。

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则自动使用错误消息而不是错误代码并将它们打印出来。

希望这可以帮助。

于 2010-05-16T14:31:43.067 回答