如何向 Zend Framework 2 中的表单添加错误消息?
How to add an error message to the form in Zend Framework 2?
我有一个包含多个嵌套 Fieldset
的复杂 Zend\Form
。现在我需要实施交叉 Fieldset
验证。这意味着,验证规则引用来自不同 Fieldset
的多个 Element
。我发现这样做的唯一方法是在 MyForm#isValid()
中实施此验证,因为它是一个地方,我可以从中访问每个 Fieldset
。
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
错误消息?
需要加入一个表单元素的消息。
$form->get('password')->setMessages(['Wrong password']);
错误消息 link 到表单的元素,而不是直接到表单。因此,正如 newage 所说,您必须为特定元素设置消息(因此他的回答是有效的,我赞成它:-))。
但是当你扩展 Form 时,你可以直接在表单中设置你自己的错误消息方法:
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;
}
}
我有一个包含多个嵌套 Fieldset
的复杂 Zend\Form
。现在我需要实施交叉 Fieldset
验证。这意味着,验证规则引用来自不同 Fieldset
的多个 Element
。我发现这样做的唯一方法是在 MyForm#isValid()
中实施此验证,因为它是一个地方,我可以从中访问每个 Fieldset
。
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
错误消息?
需要加入一个表单元素的消息。
$form->get('password')->setMessages(['Wrong password']);
错误消息 link 到表单的元素,而不是直接到表单。因此,正如 newage 所说,您必须为特定元素设置消息(因此他的回答是有效的,我赞成它:-))。
但是当你扩展 Form 时,你可以直接在表单中设置你自己的错误消息方法:
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;
}
}