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

Jea*_*ond 63 php forms input formbuilder symfony

如何使用in 将HTML class属性设置为表单?<input>FormBuilderSymfony2

像这样的东西:

->add('birthdate', 'date',array(
      'input' => 'datetime',
      'widget' => 'single_text',
      'attr' => array(
          'class' => 'calendar'
      )
 ))

 {{ form_widget(form.birthdate) }}
Run Code Online (Sandbox Code Playgroud)

我希望此input字段的属性class设置为日历

Pro*_*tic 119

您可以从twig模板执行此操作:

{{ form_widget(form.birthdate, { 'attr': {'class': 'calendar'} }) }}
Run Code Online (Sandbox Code Playgroud)

来自http://symfony.com/doc/current/book/forms.html#rendering-each-field-by-hand

  • 这真的不是问题的答案 - FormBuilder的重点是避免手工编写Twig模板. (44认同)
  • @Acyra这取决于......将大量与视图相关的东西投入到表单构建器中也不是最好的方法. (24认同)
  • 我同意,表单自定义应该在视图中,而不是在控制器中.控制器应该尽可能轻,虽然Symfony2为您创建表单非常棒,而且节省了大量时间,当您使用"花哨"的UI时,有时表单构建器会妨碍. (6认同)

Acy*_*yra 110

你可以使用FormBuilder来完成它.将其添加到FormBuilder中的数组:

'attr'=> array('class'=>'span2')
Run Code Online (Sandbox Code Playgroud)

  • 这为包装div添加类而不是输入 (9认同)

Jea*_*ean 27

如果你想在控制器中设置属性,Acyra的答案会以正确的方式引导,但是有许多不准确之处.

是的,你可以直接使用FormBuilder,使用attr属性(这里介绍2.1版本,这里介绍2.0)到选项数组,如下所示:

->add('birthdate', 'date',array(
      'input' => 'datetime',
      'widget' => 'single_text',
      'attr' => array('class'=>'calendar')
 ))
Run Code Online (Sandbox Code Playgroud)

"功能被破坏"并非如此.它运作得很好!

Symfony2并不是将HTML class属性应用于标签和输入(至少从2.1版本开始).

此外,由于attr属性是数组本身,因此您可以传递要为该字段呈现的任何HTML属性.如果您想传递HTML5 data-属性,这将非常有用.


小智 5

您可以在表单类的选项中添加它:

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\MyEntity',
        'attr' => array(
            'class' => 'form-horizontal'
        )
    ));
}
Run Code Online (Sandbox Code Playgroud)

  • 这应该是正确的答案,最好在表单类中而不是在树枝中执行此操作。 (3认同)