symfony2表单错误vs字段错误主题(twig)

时间:2012-04-25 21:56:25

标签: symfony twig

在Twig中,有没有办法为字段错误定义不同主题,反对形成CSRF错误或复合唯一约束等相关错误?

我希望使用<span>显示字段错误,并使用<ul>

显示表单错误
{{ form_errors(form) }}        

<table>
    <tbody>
        <tr>
            <td>{{ form_label(form.tabla) }}</td>
            <td>
                {{ form_widget(form.tabla) }}
                {{ form_errors(form.tabla) }}
            </td>
            <td></td>
            <td>{{ form_label(form.descripcion) }}</td>
            <td>
                {{ form_widget(form.descripcion) }}
                {{ form_errors(form.descripcion) }}
            </td>
            <td></td>
        </tr>
    </tbody>
</table>

这是我的表格主题,用于两种情况(不是我想要的)。

{% block field_errors %}
    {% if errors|length > 0 %}
        <span class="val-error">
            {% for error in errors %}
                {{ error.messageTemplate|trans(error.messageParameters, 'validators')~'. ' }}
            {% endfor %}
        </span>
    {% endif %}
{% endblock field_errors %}

有没有办法区分这两种情况?

2 个答案:

答案 0 :(得分:4)

表单类扩展Field。如果您将新主题设置为字段,则它将应用于表单。 你应该像你一样覆盖field_errors块,然后使用另一个模板(带有ul标签)定义form_errors块。

{% block field_errors %}
    {% if errors|length > 0 %}
        <span class="val-error">
            {% for error in errors %}
                {{ error.messageTemplate|trans(error.messageParameters, 'validators')~'. ' }}
            {% endfor %}
        </span>
    {% endif %}
{% endblock field_errors %}

{% block form_errors %}
    {% if errors|length > 0 %}
        <ul class="val-error">
            {% for error in errors %}
                <li>{{ error.messageTemplate|trans(error.messageParameters, 'validators')~'. ' }}</li>
            {% endfor %}
        </ul>
    {% endif %}
{% endblock form_errors %}

答案 1 :(得分:1)

自2.3中删除field_*后,已批准的解决方案将不再有效。我找到的一个hacky解决方案是

{% block form_errors %}
    {% if errors|length > 0 %}
        {% if form.parent is empty %}
            <ul class="val-error">
                {% for error in errors %}
                    <li>{{ error.messageTemplate|trans(error.messageParameters, 'validators')~'. ' }}</li>
                {% endfor %}
            </ul>
        {% else %}
             <span class="val-error">
                 {% for error in errors %}
                     {{ error.messageTemplate|trans(error.messageParameters,  'validators')~'. ' }}
                 {% endfor %}
             </span>
        {% endif %}
    {% endif %}
{% endblock form_errors %}

所以基本上这样做的是,如果没有父母,它知道它是最高级别。