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

时间:2011-07-18 14:52:05

标签: php forms symfony input formbuilder

如何使用HTML中的class<input> FormBuilder属性设置为表单Symfony2

这样的事情:

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

 {{ form_widget(form.birthdate) }}

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

8 个答案:

答案 0 :(得分:117)

您可以从树枝模板中执行此操作:

{{ form_widget(form.birthdate, { 'attr': {'class': 'calendar'} }) }}

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

答案 1 :(得分:110)

您可以使用FormBuilder执行此操作。将其添加到FormBuilder中的数组:

'attr'=> array('class'=>'span2')

答案 2 :(得分:27)

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

是的,您可以使用attr属性(2.1版本引入herehere for the 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-属性,那将非常有用。

答案 3 :(得分:5)

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

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

答案 4 :(得分:4)

DirectoryIndex app.php
    <IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]

    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .? - [L]

    RewriteRule .? %{ENV:BASE}/app.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /app.php/
    </IfModule>
</IfModule>

答案 5 :(得分:3)

像这样:

{{ form_widget(form.description, { 'attr': {'class': 'form-control', 'rows': '5', 'style': 'resize:none;'} }) }}

答案 6 :(得分:1)

您可以在Twig或FormClass中进行此操作,如上面的示例所示。但是您可能想在控制器中决定您的表格应该获得哪个类。请记住,一般而言,控制器中没有太多逻辑!

    $form = $this->createForm(ContactForm::class, null, [
        'attr' => [
            'class' => 'my_contact_form'
        ]
    ]);

答案 7 :(得分:0)

呈现给定字段的HTML小部件。如果将此应用于整个表单或字段集合,则将呈现每个基础表单行。

{# render a field row, but display a label with text "foo" #} {{ form_row(form.name, {'label': 'foo'}) }}

form_row()的第二个参数是变量数组。 Symfony中提供的模板仅允许覆盖标签,如上例所示。

请参阅“有关表单变量的更多信息”以了解变量参数。