显示与form_errors(形式)加在Symfony2中每个字段的所有错误(Display all

2019-07-01 16:11发布

我需要显示形式以上所有的错误和为每个字段显示一个单独的错误。 我怎样才能做到这一点?

Answer 1:

你需要更具体的,但希望下面的可以帮助你。

让我们假设你有一个名为变量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) }}
...


Answer 2:

{% 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为我工作



Answer 3:

我在我的包覆盖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)它显示在形式和错误所有误差在每个字段还指示。



Answer 4:

在Symfony的3.2,获得一个模板的所有形式的错误,你可以使用一个有点哈克,但简单的工作使用的解决方案form.vars.errors.form.getErrors(true)

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

诀窍是:

  1. 通过误差迭代原来的形式的对象( formView.vars.errors.form ),
  2. form.getErrors(true)为您提供了所有形式的错误递归迭代器。


Answer 5:

您的形式藏汉为您的领域均具有独立的错误域开始。 你能不能更具体的你正在尝试做的,您的问题是什么?



Answer 6:

我修改@ 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 %}

`



文章来源: Display all errors with form_errors(form) plus for each field in symfony2