Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将css类添加到特定的symfony2表单选项中?_Symfony_Symfony Forms - Fatal编程技术网

如何将css类添加到特定的symfony2表单选项中?

如何将css类添加到特定的symfony2表单选项中?,symfony,symfony-forms,Symfony,Symfony Forms,我可以用Javascript实现这一点,但我想知道是否可以将css类添加到特定的symfony2表单选项中(不是选项字段本身,而是单个选项) 例如,我想将不同的css样式应用于“select”中的单个“option”标记。我只能找到将类添加到标记的方法 提前感谢。您可以覆盖表单中特定窗口小部件的布局,这意味着您可以覆盖select呈现的方式并输入自定义代码,以检查选项的值并在其中输出自定义类 您需要对表单应用自定义布局,如下所示 {% form_theme form 'form_theme.ht

我可以用Javascript实现这一点,但我想知道是否可以将css类添加到特定的symfony2表单选项中(不是选项字段本身,而是单个选项)

例如,我想将不同的css样式应用于“select”中的单个“option”标记。我只能找到将类添加到标记的方法


提前感谢。

您可以覆盖表单中特定窗口小部件的布局,这意味着您可以覆盖select呈现的方式并输入自定义代码,以检查选项的值并在其中输出自定义类

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

{% form_theme form 'form_theme.html.twig' %}
然后在布局文件中,您需要覆盖该特定表单的特定字段(当然,除非您希望直接编辑choice_小部件,在这种情况下,所有使用choice的字段都将具有该功能)

要做到这一点,您必须复制小部件,因此选择小部件,然后将其命名为
[\u formName\u fieldName\u widget]


因此,如果您的表单名是events,字段名是requireTickets,那么它将是
\u events\u requireTickets\u widget

我认为您可以简单地执行以下操作:

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

。。。如前所述,没有创建自己的表单样式。

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

class SomeType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('someField', "text", array("attr" => array("class" => "someCssClass")))
            ->add("save", "submit");
    }
}
我发现这对基本表单很有帮助,因为它仍然允许您在您的Twig文件中进行一个简单的
{{form(someForm)}
调用


(请注意,此解决方案仍有@CriticalImpact提到的缺点)

现在可以通过以下方式将CSS样式等属性添加到个人选择中:


…或者您只需使用div标记等包装form_小部件,并为其指定属性。这会将标记添加到select,也可能添加到options,但它不允许您将类应用于单个选项。@CriticalImpact您是对的,因此OP应该创建自定义样式。谢谢,我不需要使用类名来应用特定样式,但是一些jQuery插件依赖于具有特定类的字段。我不喜欢直接编辑插件,所以这很有帮助:)
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)];
    },
));