我需要能够将 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 版本(在 Twig 中):
{% 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' } }) %}
在我看来,但我不确定如何在我的小部件主题中获取它。
我不能不为此使用单选按钮,所以告诉我切换到选择或复选框不是一个选项。如果可以的话,我真的真的不想将 radio 硬编码到我的表单 View 中。
编辑:我试过:
{% block choice_widget_expanded %}
{% for child in form %}
<input type="radio" value="{{ child.vars.value }}" {{ block('widget_attributes') }} />
{% endfor %}
{% endblock %}
但它仍然在源代码中呈现包含 div,并将我的 CSS 类传递给该 div 而不是 radio 输入。我知道主题是“有效的”,因为我在摆弄过程中抛出了一些异常。
编辑 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 %}
但是,不幸的是,它没有使用我在上面添加的类生成 radio 。我不确定我是否需要做一些继承工作。
最佳答案
有趣的是,为什么您希望每个单选选项都有一个类属性。但是……
因为 choice 是一个单独的字段(无论它有多少选项),您只能将类添加到包装器 div。对于主题,您应该使用 CSS。
谈到表单主题,如果您想覆盖单选选项,您应该覆盖
block radio_widget
(您可以在 form_div_layout.html.twig 中找到原始的)当然不要忘记告诉您模板要使用表单主题:
{% form_theme form _self %}
关于forms - Symfony2 - 将 CSS 类添加到扩展的选择字段(单选),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17283278/