3

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

但是,不幸的是,它没有生成带有我在上面添加的类的收音机。我不确定是否需要做一些继承工作。

4

1 回答 1

1

有趣的是,为什么您希望每个单选选项都具有类属性。但...

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

  2. 谈到表单主题,如果你想覆盖你应该覆盖的单选选项block radio_widget(你可以在 form_div_layout.html.twig 中找到原始选项)

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

    {% form_theme form _self %}
    
于 2013-06-24T21:05:29.773 回答