如何将类属性设置为Symfony2表单输入


How to set a class attribute to a Symfony2 form input

如何使用Symfony2中的FormBuilderHTML 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中提供的模板只允许覆盖标签,如上面的例子所示。

参见"更多关于表单变量"来了解变量参数