4

In Twig, is there a way to define a different theme for field errors as oppose to form related errors like CSRF error or composite unique constraints?

I want to display the field errors with a <span> and the form errors with a <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>

This is my form theme that is being used for both cases (not what I want).

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

Is there a way to differentiate both cases?

4

2 に答える 2

4

Form クラスは Field を拡張します。新しいテーマをフィールドに設定すると、フォームに適用されます。前と同じように 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

は 2.3 で削除されたためfield_*、承認されたソリューションは機能しなくなります。私が見つけたハッキーな解決策は

{% 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 に答える