3

選択したフィールドの個々のラジオ ボタンに CSS クラスを追加できるようにする必要があります。残念ながら、Symfony2 は div に拡張された選択肢を詰め込んでおり、ボタン自体ではなく、CSS クラスで渡されたものを取得します。

デフォルトのウィジェットのテーマ (PHP) は次のとおりです。

<div <?php echo $view['form']->block($form, 'widget_container_attributes') ?>>
    <?php foreach ($form as $child): ?>
        <?php echo $view['form']->widget($child) ?>
        <?php echo $view['form']->label($child) ?>
    <?php endforeach ?>
</div>

これが私のdivのないバージョンです(小枝で):

{% block choice_widget_expanded %}
    {% for child in form %}
        {{ form_widget(child) }}
        {{ form_label(child) }}
    {% endfor %}
{% endblock %}

では、CSS クラスを実際のウィジェットに渡すにはどうすればよいでしょうか。私はそれを次のように渡しています:

{% form_widget(form.blah, { 'attr' : { 'class': 'css-class' } }) %}

私の見解では、ウィジェットのテーマでそれを取得する方法がわかりません。

これにはラジオボタンを使用できないため、選択またはチェックボックスに切り替えるように指示することはできません。そして、できればフォームビューにラジオをハードコーディングしたくありません。


編集:私は試しました:

{% block choice_widget_expanded %}
    {% for child in form %}
        <input type="radio" value="{{ child.vars.value }}" {{ block('widget_attributes') }} />
    {% endfor %}
{% endblock %}

それでも、ソースに含まれる div をレンダリングし、CSS クラスをラジオ入力の代わりにその div に渡します。いじっている間にいくつかの例外がスローされたため、テーマが「機能している」ことはわかっています。


編集 2: 以下の提案で、私は自分の radio_widget テーマを作成しました:

{% block radio_widget %}
    <input type="radio" class="star {split:2}" {{ block('widget_attributes') }} value="{{ value }}" {% if checked == true %}checked="checked"{% endif %} />
{% endblock %}

しかし、残念ながら、上で追加したクラスでラジオを生成していません。継承作業を行う必要があるかどうかはわかりません。

4

1 に答える 1

1

興味深いことに、すべてのラジオ オプションに class 属性が必要な理由です。しかし...

  1. Choice は単一のフィールドであるため(オプションの数に関係なく)、クラスをラッパー div にのみ追加できます。テーマには CSS を使用する必要があります。

  2. ラジオオプションをオーバーライドしたい場合は、フォームのテーマについて言えば、オーバーライドする必要がありますblock radio_widget(元のものは form_div_layout.html.twig にあります)。

  3. そしてもちろん、フォームテーマを使用するようにテンプレートに指示することを忘れないでください:

    {% form_theme form _self %}
    
于 2013-06-24T21:05:29.773 に答える