我需要能够为我选择的字段中的每个单独的单选按钮添加一个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 %}
但是,不幸的是,它没有生成我上面添加的类的无线电。我不确定是否需要做一些继承工作。
答案 0 :(得分:1)
有趣的是,为什么你希望每个无线电选项都有一个class属性。但...
因为选择是单个字段(无论它有多少选项),您只能将类添加到包装器div。对于主题,你应该使用CSS。
如果要覆盖广播选项,请说明表单主题,您应该覆盖block radio_widget
(您可以在form_div_layout.html.twig中找到原始版本)
当然不要忘记告诉你使用表单主题的模板:
{% form_theme form _self %}