Как добавить сообщение об ошибке в форму в Zend Framework 2?

У меня комплекс Zend\Form с несколькими вложенными Fieldsets. Теперь мне нужно реализовать перекрестныйFieldset-Проверка. Это означает, что правило проверки относится к нескольким Elementс разных Fieldsets. Единственный способ, который я нашел, — это выполнить эту проверку в 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 Сообщения об ошибках?

2

Решение

Сообщения об ошибках — это ссылки на элементы формы, а не непосредственно на форму. Таким образом новый вариант сказал, что вы должны установить сообщение для определенного элемента (поэтому его ответ действителен, и я проголосовал за него :-)).

Но когда вы расширяете форму, вы можете установить собственный метод сообщения об ошибках непосредственно в форме:

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;
}

}
2

Другие решения

Нужно присоединиться к сообщению для элемента формы.

$form->get('password')->setMessages(['Wrong password']);
3

По вопросам рекламы [email protected]