Forms 对于symfony2中的每个字段,使用form_errors(form)plus显示所有错误

Forms 对于symfony2中的每个字段,使用form_errors(form)plus显示所有错误,forms,symfony,error-handling,Forms,Symfony,Error Handling,我需要在表单上方显示所有错误,并为每个字段显示单独的错误。我该怎么做呢?您的表单和字段都有单独的错误字段开始。你能更具体地说明你想做什么以及你的问题在哪里吗?你需要更具体一些,但希望下面的内容能对你有所帮助 假设您有一个名为form的变量 {{form_errors(form)}}显示不特定于一个字段的全局错误 {{form_errors(form.email)}显示特定于字段的错误 {{form_row(form.email)}为字段显示form_小部件form_标签和form_错误 编辑:

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

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

你需要更具体一些,但希望下面的内容能对你有所帮助

假设您有一个名为
form
的变量

{{form_errors(form)}}
显示不特定于一个字段的全局错误

{{form_errors(form.email)}
显示特定于字段的错误

{{form_row(form.email)}
为字段显示form_小部件form_标签和form_错误

编辑:

因此,如果希望全局和字段错误显示在同一位置,可以执行以下操作:

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

我正在覆盖捆绑包中的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 %}
{%block form\u errors%}
{%spaceless%}
{%set a=false%}
{form.children%}
{%if-child.get(“错误”)%}
{%set a='true%}
{%endif%}
{%endfor%}
{%a==true%}
{%为form.children%}
{{form_errors(children)}
{%endfor%}
{%endif%}
{%如果错误|长度>0%}
    {错误%中的错误为%0} {{ error.messagePluralization为null ?error.messageTemplate | trans(error.messageParameters,‘validators’) :error.messageTemplate | transchoice(error.messagePluralization,error.messageParameters,'validators') }} {%endfor%}
{%endif%} {%endspaceless%} {%endblock form_errors%}
现在,如果write
form\u errors(form)
将显示表单中的所有错误,并且每个字段上的错误也会显示

{%spaceless%}
{% 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 %}
{%如果不是form.vars.valid%} {{form_errors(form)}} {%为form.children%} {%如果不是children.vars.valid%} {{form_errors(children)} {#或具有字段标签
    {%for children.vars.errors%中的错误}
  • {{children.vars.label}}:{{error.message}
  • {%endfor%}
#} {%endif%} {%endfor%} {%endif%} {%endspaceless%}

在sf 2.3中为我工作

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

{%block form\u errors%}
{%spaceless%}
    {%为form.children%} {%如果不是children.vars.valid%} {%for children.vars.errors%中的错误}
  • {{children.vars.label~''~ error.messagePluralization为null ?error.messageTemplate | trans(error.messageParameters,‘validators’) :error.messageTemplate | transchoice(error.messagePluralization,error.messageParameters,'validators') }}
  • {%endfor%} {%endif%} {%endfor%}
{%如果错误|长度>0%}
    {错误%中的错误为%0}
  • {{ error.messagePluralization为null ?error.messageTemplate | trans(error.messageParameters,‘validators’) :error.messageTemplate | transchoice(error.messagePluralization,error.messageParameters,'validators') }}
  • {%endfor%}
{%endif%} {%endspaceless%} {%endblock form_errors%}

`

在Symfony 3.2中,要获取模板中的所有表单错误,您可以使用一种有点粗糙但简单且有效的解决方案,使用
form.vars.errors.form.getErrors(true)

    {formView.vars.errors.form.getErrors(true)%%中的错误为%
  • {{error.message}}
  • {%endfor%}
诀窍在于:

  • 通过错误迭代器(
    formView.vars.errors.form
    )创建原始表单对象
  • form.getErrors(true)
    为您提供了一个针对所有表单错误的递归迭代器

  • 我需要在每个字段上显示相同的错误(所有错误都显示在一个位置)和调用表单错误(表单),可能吗?Daniel已经向您发布了表单文档。它应该能帮你找到满足你需要的东西,但不能解决我的问题。我需要在所有表单上的一个位置上的每个字段上出现与我的表单相同的错误。{{form_errors(form)}}只显示不特定于一个字段的全局错误。我的答案解决了您的问题。阅读文档,它会告诉你怎么做。即使是我自己的答案也应该足够了。我更新了我的答案,希望你现在明白了。如果在理解之前不阅读文档。child.get(“errors”)不适用于Symfony 2.5。有人对此有解决方案吗?在新版本中使用
    vars.errors
    ,或者只转储表单字段以查看属性。这在Symfony 2.7.1中不再适用。”children.vars.valid'(第5行)不存在您可以将
    {%if not children.vars.valid%}
    替换为
    {%if children.vars.errors | length>0%}
    {% 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 %}
    
    <ul>
        {% for error in formView.vars.errors.form.getErrors(true) %}
        <li>{{ error.message }}</li>
        {% endfor %}
    </ul>