嵌套形式和树枝显示错误

Error in nested form and twig display

我的 Twig 模板中显示错误。 这是我的带有一种嵌套形式的树枝 form.pictures :

{{ form_start(form) }}
{% if not form.vars.valid %}
    <div class="flash-errors-wrapper">
        {{ form_errors(form) }}
        <div class="form-errors">{{ form_errors(form.pictures) }}</div>
    </div>
{% endif %}

{% for formChild in form.pictures %}
<div class="child">
    {% if not formChild.vars.valid %}
        <div class="flash-errors-wrapper">
            {{ form_errors(form) }}
            <div class="form-errors">{{ form_errors(form.picture) }}</div>
            <div class="form-errors">{{ form_errors(form.caption) }}</div>
        </div>
    {% endif %}

    {{ form_widget(formChild.picture) }}
    {{ form_widget(formChild.caption) }}
</div>
{% endfor %}
{{ form_end(form) }}

提交后,当子表单无效时,我的父表单也无效。 问题是它在顶部显示空 div,如:

    <div class="flash-errors-wrapper">
        <div class="form-errors"></div>
    </div>

我不想这样,因为 css 存在于 flash-errors-wrapper class 上,所以应用了样式。

有什么想法吗?

在检查父表单是否有效的同时,您当然需要检查一个子表单是否无效。一种方法是(未经测试,可能需要一些调整):

{% if not form.vars.valid %}
    {% set all_childs_valid = True %}
    {% for formChild in form.pictures %}
       {% if not formChild.vars.valid %}
          {% set all_childs_valid = False %}
       {% endif %}
    {% endfor %}

    {% if all_childs_valid %}
    <div class="flash-errors-wrapper">
        {{ form_errors(form) }}
        <div class="form-errors">{{ form_errors(form.pictures) }}</div>
    </div>
    {% endif %}
{% endif %}

我通常会按照 docs:

中的描述显示表单错误
 {% if errors|length > 0 %}
    <ul>
        {% for error in errors %}
            <li>{{ error.message }}</li>
        {% endfor %}
    </ul>
 {% endif %}