嵌套表单和树枝显示出错

时间:2015-08-24 15:48:27

标签: php forms symfony 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>

我不希望这样,因为flash-errors-wrapper类上存在css所以应用了样式。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我通常会按docs

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