選択したフィールドの個々のラジオ ボタンに 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 %}
しかし、残念ながら、上で追加したクラスでラジオを生成していません。継承作業を行う必要があるかどうかはわかりません。