Php 如何在Zend Framework 2中向表单添加错误消息?
我有一个复杂的Php 如何在Zend Framework 2中向表单添加错误消息?,php,validation,zend-framework2,zend-form,validationerror,Php,Validation,Zend Framework2,Zend Form,Validationerror,我有一个复杂的Zend\Form和多个嵌套的字段集。现在我需要实现一个跨域验证。这意味着,验证规则引用来自不同字段集s的多个元素s。我找到的唯一方法是在MyForm#isValid()中实现此验证,因为它是我可以从中访问每个字段集的唯一位置 MyForm extends Form { public function isValid() { $isFormValid = parent::isValid(); $isCrossFieldsetVaida
Zend\Form
和多个嵌套的字段集。现在我需要实现一个跨域验证。这意味着,验证规则引用来自不同字段集
s的多个元素
s。我找到的唯一方法是在MyForm#isValid()
中实现此验证,因为它是我可以从中访问每个字段集的唯一位置
MyForm extends Form
{
public function isValid()
{
$isFormValid = parent::isValid();
$isCrossFieldsetVaidationOk = // my additional validation logic
return $isFormValid && $isCrossFieldsetVaidationOk;
}
}
还没有测试,但它会起作用。问题在于添加错误消息
我试过了
$this->setMessages(array_merge(
$this->getMessages(), ['my new message'])
);
但它不起作用
如何添加表单
错误消息?需要加入表单元素的消息
$form->get('password')->setMessages(['Wrong password']);
错误消息链接到表单的元素,而不是直接链接到表单。正如newage所说,您必须为一个特定的元素设置消息(这样他的答案是有效的,我把它投了-)
但在扩展表单时,可以直接在表单中设置自己的错误消息方法:
MyForm extends Form
{
protected $errorMessages = [];
public function isValid()
{
$isFormValid = parent::isValid();
$isCrossFieldsetValidationOk = // your additional validation logic
if (!$isCrossFieldsetValidationOk) {
$this->addErrorMessage('Oh oh... Cross-fieldset validation error...');
}
return $isFormValid && $isCrossFieldsetValidationOk;
}
public function addErrorMessage($text)
{
$this->errorMessages[] = $text ;
return $this; // For a fluent setter
}
public function getErrorMessages()
{
return $this->errorMessages ;
}
public function getMessages($elementName = null)
{
if ($elementName) {
$messages = parent::getMessages($elementName);
} else {
$messages = array_merge($this->getErrorMessages(), parent::getMessages($elementName));
}
return $messages;
}
}
谢谢你的回答!但无效的不是元素,而是跨多个元素
s(在不同的字段集
s)的条件。例如:存在多个不同字段集的foo
元素(我们不知道有多少,它们是动态添加的)。必须至少设置/填写一个foo
。另一个示例:有多个条元素。它们的值之和必须大于x
。在这两种情况下,元素
的值本身不能有效或无效。这就是为什么我在寻找一种方法来定义“跨字段集
s”的验证,并将消息直接添加到表单
@automatix中。也许这个链接会对您有所帮助。这是一个很好的教程,但它没有回答我的问题。谢谢你的回答!实际上,这样我可以让我的表单保存“表单错误消息”并检索它们。下一步是将它们与元素
s'消息集成,以便将它们显示在一起。为此,必须重写元素#getMessages(…)
。我将用它来扩展你的答案。或者有更好的解决办法?