Как интегрировать метку элемента в сообщение об ошибке валидации в 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
            );
        }
    }
}
Другие вопросы по тегам