Поскольку Mark указывает в своем ответе, getMessages () возвращает массив имен элементов формы в виде ключей, каждый из которых содержит массив ошибок для этого элемента;и его решение:
$arrMessages = $this->myForm->getMessages();
foreach($arrMessages as $field => $arrErrors) {
echo sprintf(
'<ul><li>%s</li>%s</ul>',
$this->myForm->getElement($field)->getLabel(),
$this->formErrors($arrErrors)
);
}
Это работает, пока getMessages()
приводит к двумерному массиву.Однако, если форма основана на наборах реляционных данных, сгенерированных Doctrine (или каким-либо другим плагином), сообщение об ошибке, связанное с полем, также может быть массивом, и приведенный выше код завершится сбоем, поскольку при обработке он обрабатывает $arrErrors
как строкуоказывается массивом.
Чтобы захватить сообщения об ошибках, если есть второй набор данных, мы могли бы ввести оператор foreach, вложенный в первый оператор foreach, но это не сработает, когда getMessages()
приведет кдвумерный массив;и не работает, если наборы данных имеют глубину более двух.
В сценарии реляционных данных, в котором мы не знаем, насколько глубоким является сообщение об ошибке, масштабируемое решение имеет значение
$arrMessages = $this->myForm->getMessages();
print_r ($arrMessages);