我可以用Javascript做到这一点,但我想知道我是否可以将css类添加到特定的symfony2表单选项(不是选择字段本身,而是个别选项)。
例如,我想将不同的CSS样式应用于'select'中的各个'option'标签。我只能找到一种方法来为标签添加一个类。
提前致谢。
您可以覆盖表单中特定小部件的布局,这意味着您可以覆盖选择呈现的方式并放入自定义代码以检查选项的值是什么,并在那里输出您的自定义类。
您需要将自定义布局应用于表单,如此
{% form_theme form 'form_theme.html.twig' %}
然后在布局文件中,您需要覆盖该特定表单的特定字段(除非您想直接编辑choice_widget,在这种情况下,所有使用选择的字段都将具有该功能)。
要做到这一点,你必须复制小部件,所以choice_widget,然后命名为[_formName_fieldName_widget]
因此,如果您的表单名称是事件而您的字段名称是requireTickets,则它将是_events_requireTickets_widget
我想你可以做到:
{{ form_widget(form.name, { 'attr' : { 'class' : 'myClass' } }) }}
...正如here所解释的那样,没有创建自己的表单风格。
已经提供的答案非常好,我认为@ CriticalImpact是最灵活的。但我只想提一下,如果您使用的是表单类,还可以通过表单构建器定义本身向该字段添加额外的属性:
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提到above的缺点)
现在可以使用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)];
},
));