Symfony2 - 将CSS类添加到扩展选项字段(radio)

时间:2013-06-24 19:15:05

标签: forms symfony

我需要能够为我选择的字段中的每个单独的单选按钮添加一个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 %}

但是,不幸的是,它没有生成我上面添加的类的无线电。我不确定是否需要做一些继承工作。

1 个答案:

答案 0 :(得分:1)

有趣的是,为什么你希望每个无线电选项都有一个class属性。但...

  1. 因为选择是单个字段(无论它有多少选项),您只能将类添加到包装器div。对于主题,你应该使用CSS。

  2. 如果要覆盖广播选项,请说明表单主题,您应该覆盖block radio_widget(您可以在form_div_layout.html.twig中找到原始版本)

  3. 当然不要忘记告诉你使用表单主题的模板:

    {% form_theme form _self %}