Показать все ошибки с form_errors (form) плюс для каждого поля в symfony2

Мне нужно отобразить все ошибки над формой и отобразить отдельную ошибку для каждого поля. Как я могу это сделать?

Ответы на вопрос(6)

{% spaceless %}
    {% if not form.vars.valid %}
            <div class="alert alert-error">
                {{ form_errors(form) }}

        {% for children in form.children %}
            {% if not children.vars.valid %}
                {{ form_errors(children) }}

                {# or with field label
                <ul>
                    {% for error in children.vars.errors %}
                        <li><b>{{ children.vars.label }}</b>: {{ error.message }}</li>
                    {% endfor %}
                </ul>
                #}
            {% endif %}
        {% endfor %}
            </div>
    {% endif %}
{% endspaceless %}

а также все ваши поля имеют отдельные поля ошибок для начала. Не могли бы вы уточнить, что вы пытаетесь сделать и где ваша проблема?

 Schwierig22 окт. 2012 г., 13:32
Даниэль уже отправил вам документацию формы. Это должно помочь вам найти что-то для ваших нужд.
 korvinko22 окт. 2012 г., 14:46
Это не решит мою проблему. Мне нужна та же ошибка, что и над каждым полем моей формы в одном месте над всей формой. {{form_errors (form)}} Отображает только глобальные ошибки, не относящиеся только к одному полю.
 korvinko22 окт. 2012 г., 13:27
Мне нужно, чтобы одинаковые ошибки над каждым полем отображались в верхней форме (все ошибки в одном месте) с вызовом form_errors (form), возможно ли это?
 d000122 окт. 2012 г., 22:47
Мой ответ действительно решит ваш вопрос. Прочитайте документацию, и она тут же расскажет вам, как это сделать. Даже моего собственного ответа должно быть достаточно. Я обновил свой ответ, надеюсь, вы понимаете это сейчас. Если не читать документацию, пока не поймешь это.
Решение Вопроса

m переопределение form_div_layout.html.twig в моем комплекте:

{% block form_errors %}
    {% spaceless %}
        {% set a = false %}
        {% for child in form.children  %}
            {% if child.get("errors") %}
                {% set a = 'true' %}
            {% endif %}
        {% endfor %}
        {% if a == true %}
            
                {% for children in form.children %}
                    {{  form_errors(children) }}
                {% endfor %}
            
        {% endif %}
        {% if errors|length > 0 %}
            
                {% for error in errors %}
                    {{
                    error.messagePluralization is null
                    ? error.messageTemplate|trans(error.messageParameters, 'validators')
                    : error.messageTemplate|transchoice(error.messagePluralization, error.messageParameters, 'validators')
                    }}
                {% endfor %}
            
        {% endif %}
    {% endspaceless %}
{% endblock form_errors %}

Сейчас если пишешьform_errors(form) он отображает все ошибки в форме и ошибка в каждом поле также указывает.

 Jekis07 нояб. 2013 г., 14:35
Не работает для Symfony 2.3
 user350262628 янв. 2017 г., 06:42
использованиеvars.errors на новых версиях или просто сбросьте поле формы, чтобы увидеть атрибуты.
 Jeet07 нояб. 2014 г., 11:01
child.get (»ошибки») неработать на Symfony 2.5 У кого-нибудь есть решение для этого?

чтобы получить все ошибки формы в шаблоне, вы можете использовать немного странное, но простое и работающее решение, используя:form.vars.errors.form.getErrors(true)

<ul>
    {% for error in formView.vars.errors.form.getErrors(true) %}
    <li>{{ error.message }}</li>
    {% endfor %}
</ul>

Хитрость в том, что:

исходный объект формы через итератор ошибок (formView.vars.errors.form),form.getErrors(true) дает вам рекурсивный итератор для всех ошибок формы.
 Superbiji08 февр. 2018 г., 09:51
Это работа в Symfony 4 LOL, почему это трудно
 AKCD19 сент. 2017 г., 12:44
это также будет работать со старыми версиями, например 2,7
 user379089711 янв. 2018 г., 16:48
Но ярлыков нет .. для чего это нужно?

Я пересмотрел @korvinko 'S скрипт, это работает для Symfony 2.6.11 ``

{% block form_errors %}
    {% spaceless %}
        
            {% for children in form.children %}
                {% if not children.vars.valid %}
                   {% for error in children.vars.errors %}
                        {{ children.vars.label ~ ' ' ~
                        error.messagePluralization is null
                        ? error.messageTemplate|trans(error.messageParameters, 'validators')
                        : error.messageTemplate|transchoice(error.messagePluralization, error.messageParameters, 'validators')
                        }}
                    {% endfor %}
                {% endif %}
            {% endfor %}
        

        {% if errors|length > 0 %}
            
                {% for error in errors %}
                    {{
                    error.messagePluralization is null
                    ? error.messageTemplate|trans(error.messageParameters, 'validators')
                    : error.messageTemplate|transchoice(error.messagePluralization, error.messageParameters, 'validators')
                    }}
                {% endfor %}
            
        {% endif %}
    {% endspaceless %}
{% endblock form_errors %}

 Wouter Sioen23 дек. 2015 г., 14:27
Вы могли бы заменить{% if not children.vars.valid %} с{% if children.vars.errors|length > 0 %}
 Thomas Landauer19 сент. 2015 г., 17:13
Это н'больше не работаю в Symfony 2.7.1. 'children.vars.valid» (строка 5) не существует

Вам нужно быть более конкретным, но, надеюсь, вам поможет следующее.

Предположим, у вас есть переменная с именем.form

{{ form_errors(form) }} Отображает глобальные ошибки не только для одного поля

{{ form_errors(form.email) }} Отображает ошибки, специфичные для поля

{{ form_row(form.email) }} Отображает form_widget form_label и form_errors для поля

http://symfony.com/doc/2.0/cookbook/form/form_customization.html

Редактировать:

Поэтому, если вы хотите, чтобы ваши глобальные и полевые ошибки отображались в одном и том же месте, вы можете сделать следующее:

{{ form_errors(form) }}
{{ form_errors(form.field1) }}
{{ form_errors(form.field2) }}
...

Ваш ответ на вопрос