4

Symfony2 フォームのレンダリングをカスタマイズして、生成されるすべての選択にクラスを追加しようとしています。カスタムの form_div_layout.html.twig があると思いました:

{% block choice_widget_collapsed %}
{% spaceless %}
    <select class='myclass' {{ block('widget_attributes') }}{% if multiple %} multiple="multiple"{% endif %}>
    {% if empty_value is not none %}
        <option value="">{{ empty_value|trans({}, translation_domain) }}</option>
    {% endif %}
    {% if preferred_choices|length > 0 %}
        {% set options = preferred_choices %}
        {{ block('choice_widget_options') }}
        {% if choices|length > 0 and separator is not none %}
            <option disabled="disabled">{{ separator }}</option>
        {% endif %}
    {% endif %}
    {% set options = choices %}
    {{ block('choice_widget_options') }}
</select>
{% endspaceless %}
{% endblock choice_widget_collapsed %}

そしてそれを一緒に使う

{% form_theme form 'YOPYourOwnPoetBundle:Form:form_div_layout.html.twig' %}

トリックを行うでしょう。

ただし、クラス「myclass」は選択に追加されません。私は何を間違っていますか?

4

2 に答える 2

4

最初に、使用しようとしているテーマ ファイルがform_theme式で使用している名前と同じ名前であり、そのファイルが実際にそこにあることを確認する必要があります。これらが一致しない場合にTwigが例外をスローするかどうかを頭の中で思い出せません。

さらにclass、フォームの作成時またはレンダリング時に誤って属性を渡してしまう可能性があります。何が起こるかというと、要素に 2 つのclass属性が含まれるようになりました。

回避策は、新しいクラスを既存のクラスのコレクションに実際に追加することです。

{% block choice_widget_collapsed %}
{% spaceless %}
{% set label_attr = label_attr|merge({class: label_attr.class|default('') ~ ' required'}) %}
    {% set attr = attr|merge({class: (attr.class|default('') ~ ' myclass')|trim}) %}
    <select {{ block('widget_attributes') }}{% if multiple %} multiple="multiple"{% endif %}>
    {# ... #}
</select>
{% endspaceless %}
{% endblock choice_widget_collapsed %}

これにより、後で特定の要素に必要になる可能性がある任意のクラスを追加できます。

編集

Sf2 Github リポジトリを見ると、テーマ ファイルが最近変更されたようです。バージョン 2.0.* では をオーバーライドする必要がありchoice_widget、バージョン 2.1.* では正しいブロックはchoice_widget_collapsed.

于 2012-07-06T06:39:03.610 に答える
0

フォームのテーマ行を次のように変更する必要があると思います。

{% form_theme form 'YOPYourOwnPoetBundle:Form:form_div_layout.html.twig' %}

または、小枝ファイルの名前を fields.html.twig に変更する必要があります

両方が一致する必要があります。

于 2012-07-06T06:18:40.607 に答える