使用form_errors(form)以及symfony2中的每个字段显示所有错误

时间:2012-10-22 07:40:13

标签: forms symfony error-handling

我需要在表单上方显示所有错误,并为每个字段显示单独的错误。我怎么能这样做?

5 个答案:

答案 0 :(得分:11)

您需要更具体,但希望以下内容可以帮助您。

假设您有一个名为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) }}
...

答案 1 :(得分:7)

我在我的包中覆盖了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 %}
            <div class="alert">
                {% for children in form.children %}
                    {{  form_errors(children) }}
                {% endfor %}
            </div>
        {% endif %}
        {% if errors|length > 0 %}
            <ul>
                {% for error in errors %}
                    {{
                    error.messagePluralization is null
                    ? error.messageTemplate|trans(error.messageParameters, 'validators')
                    : error.messageTemplate|transchoice(error.messagePluralization, error.messageParameters, 'validators')
                    }}
                {% endfor %}
            </ul>
        {% endif %}
    {% endspaceless %}
{% endblock form_errors %}

现在,如果写form_errors(form),它会在表单中显示所有错误,并且每个字段的错误也表示。

答案 2 :(得分:7)

{% 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 %}

在sf 2.3中为我工作

答案 3 :(得分:0)

您的表单和字段都有单独的错误字段。你能更具体地说明你想要做什么以及你的问题在哪里吗?

答案 4 :(得分:0)

我修改了@ korvinko的脚本,这适用于Symfony 2.6.11 `

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

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

`