我需要能够为我选择字段的每个单选按钮添加一个 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 %}
但是,不幸的是,它没有生成带有我在上面添加的类的收音机。我不确定是否需要做一些继承工作。