4

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

我想用 a 显示字段错误,用 a 显示<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 %}

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

4

2 回答 2

4

表单类扩展字段。如果您将新主题设置为字段,它将应用于表单。您应该像以前一样覆盖 field_errors 块,然后使用另一个模板(带有 th 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 %}
于 2012-04-26T22:55:00.420 回答
1

由于field_*在 2.3 中被删除,批准的解决方案将不再有效。我发现的一个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 %}

所以基本上,如果没有父级,它知道它是顶级的。

于 2013-07-09T18:54:10.000 回答