9

我可以使用 Javascript 来做到这一点,但我想知道是否可以将 css 类添加到特定的 symfony2 表单选择(不是选择字段本身,而是个人选择)。

例如,我想将不同的 CSS 样式应用于“选择”内的单个“选项”标签。我只能找到一种将类添加到标签的方法。

提前致谢。

4

4 回答 4

11

我认为你可以简单地做:

{{  form_widget(form.name, { 'attr' : { 'class' : 'myClass' } })  }}

... 如此所述,无需创建自己的表单样式。

于 2012-05-27T10:05:28.540 回答
4

您可以覆盖表单中特定小部件的布局,这意味着您可以覆盖选择呈现的方式并放入自定义代码以检查选项的值是什么并在那里输出您的自定义类。

您需要将自定义布局应用于表单,如下所示

{% form_theme form 'form_theme.html.twig' %}

然后在布局文件中,您需要覆盖该特定表单的特定字段(当然,除非您想直接编辑choice_widget,在这种情况下,所有使用choice 的字段都将具有该功能)。

为此,您必须复制小部件,因此选择小部件,然后将其命名 [_formName_fieldName_widget]

因此,如果您的表单名称是 events 而您的字段名称是 requireTickets,那就是_events_requireTickets_widget

于 2012-05-27T08:01:39.850 回答
4

已经提供的答案非常好,我认为@CriticalImpact 是最灵活的。但我只想提一下,如果您使用的是表单类,您还可以通过表单构建器定义本身向字段添加额外的属性:

class SomeType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('someField', "text", array("attr" => array("class" => "someCssClass")))
            ->add("save", "submit");
    }
}

我发现这对基本表单很有帮助,因为它仍然允许您{{ form(someForm) }}在 Twig 文件中进行简单的调用。

(请注意,这个解决方案仍然有上面提到的@CriticalImpact 的缺点)

于 2013-10-06T01:23:24.037 回答
3

现在可以使用choice_attr为个人选择添加CSS 样式等属性,例如:

use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
// ...

$builder->add('attending', ChoiceType::class, array(
    'choices' => array(
        'Yes' => true,
        'No' => false,
        'Maybe' => null,
    ),
    'choice_attr' => function($val, $key, $index) {
        // adds a class like attending_yes, attending_no, etc
        return ['class' => 'attending_'.strtolower($key)];
    },
));
于 2017-12-16T16:30:32.000 回答