如何使用Symfony2
中的FormBuilder
将HTML
class
属性设置为形式<input>
?
像这样:
->add('birthdate', 'date',array(
'input' => 'datetime',
'widget' => 'single_text',
'attr' => array(
'class' => 'calendar'
)
))
{{ form_widget(form.birthdate) }}
我想要这个input
字段与属性class
设置为日历
您可以从twig模板中执行此操作:
{{ form_widget(form.birthdate, { 'attr': {'class': 'calendar'} }) }}
从http://symfony.com/doc/current/book/forms.html rendering-each-field-by-hand 你可以用FormBuilder来做。将它添加到FormBuilder中的数组中:
'attr'=> array('class'=>'span2')
如果你想在控制器中设置属性,Acyra的答案是正确的,但是有很多不准确的地方。
是的,你可以通过使用attr
属性(这里为2.1版本介绍,这里为2.0版本介绍)来直接使用FormBuilder来完成,如下所示:
->add('birthdate', 'date',array(
'input' => 'datetime',
'widget' => 'single_text',
'attr' => array('class'=>'calendar')
))
"功能被破坏"是不正确的。它工作得很好!
Symfony2将HTML class
属性应用于标签和输入(至少从2.1版本开始)是不正确的。
此外,由于attr
属性本身是一个数组,因此可以传递任何想要为该字段呈现的HTML属性。这是非常有用的,如果你想传递HTML5 data-
属性
您可以将它添加到表单类的选项中:
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle'Entity'MyEntity',
'attr' => array(
'class' => 'form-horizontal'
)
));
}
{{ form_widget(form.content, { 'attr': {'class': 'tinyMCE', 'data-theme': 'advanced'} }) }}
像这样:
{{ form_widget(form.description, { 'attr': {'class': 'form-control', 'rows': '5', 'style': 'resize:none;'} }) }}
您可以在上面的示例中使用Twig或FormClass来执行此操作。但你可能想在控制器中决定你的表单应该得到哪个类。只要记住,在控制器中一般不要有太多的逻辑!
$form = $this->createForm(ContactForm::class, null, [
'attr' => [
'class' => 'my_contact_form'
]
]);
呈现给定字段的HTML小部件。如果将此应用于整个表单或字段集合,则将呈现每个底层表单行。
{# render a field row, but display a label with text "foo" #}
{{ form_row(form.name, {'label': 'foo'}) }}
form_row()的第二个参数是一个变量数组。Symfony中提供的模板只允许覆盖标签,如上面的例子所示。
参见"更多关于表单变量"来了解变量参数