Как интегрировать метку элемента в сообщение об ошибке валидации в ZF2?
У меня есть форма, где сообщения об ошибках должны отображаться в комплекте в одном месте. Сообщения по умолчанию являются общими, поэтому пользователь иногда не знает, какое сообщение для какого поля формы:
Была найдена запись, соответствующая вводу
Значение является обязательным и не может быть пустым
Введен неверный адрес электронной почты...
Я мог бы написать собственное сообщение для каждого поля, но это много усилий и скопировать и вставить.
Итак, я хотел бы отобразить такие сообщения:
Мой элемент Метка Foo: найдена запись, соответствующая вводу
Метка панели моего элемента: значение является обязательным и не может быть пустым
Мой элемент метка Buz: вход не является действительным адресом электронной почты...
Как этого добиться?
1 ответ
ZF2, по-видимому, не обеспечивает решение этого требования. Мое решение / обходной путь - переопределить Zend\Form\View\Helper\FormElementErrors
заменив эти строки FormElementErrors#render(...)
от
$this->prepareMessagesToPrint($messages, $messagesToPrint, $element, $escapeHtml);
и добавить метод, который обрабатывает $messages
по желанию:
protected function prepareMessagesToPrint($messages, &$messagesToPrint, $element, $escapeHtml) {
foreach ($messages as $nameOrType => $elementOrError) {
if (is_string($elementOrError)) {
$elementLabel = $element->getLabel()
? '<b>' . $this->view->translate($element->getLabel()) . '</b>' . ': '
: null
;
$message = $escapeHtml($elementOrError);
$messagesToPrint[] = $elementLabel ? $elementLabel . $message : $message;
} elseif (is_array($elementOrError)) {
$newElement = $element->get($nameOrType);
$this->prepareMessagesToPrint(
$elementOrError, $messagesToPrint, $newElement, $escapeHtml
);
}
}
}