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

Posted

技术标签:

【中文标题】如何将类属性设置为 Symfony2 表单输入【英文标题】:How to set a class attribute to a Symfony2 form input 【发布时间】:2011-10-07 18:26:35 【问题描述】:

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

类似这样的:

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

  form_widget(form.birthdate) 

我想要这个 inputfield 属性 class 设置为 日历

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

这真的不是问题的答案——FormBuilder 的重点是避免手动编码 Twig 模板。 @Acyra 这取决于...将大量与视图相关的内容放入表单构建器也不是最好的方法。 我同意,表单自定义应该存在于视图中,而不是控制器中。控制器应该尽可能轻巧,虽然 Symfony2 为您创建表单非常棒,而且可以节省大量时间,但当您使用“花哨”的 UI 时,有时表单构建器会妨碍您。 @numerah:旧评论,但对于可能看到您评论的其他人:是的,我们这样做!您可以使用'attr' 设置所有类型的属性。 @Acyra 表单主题模板怎么样?如果你想为你的所有表单保持一种风格,你必须这样做一次..【参考方案2】:

您可以使用 FormBuilder 来完成。将此添加到 FormBuilder 中的数组中:

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

【讨论】:

这将类添加到包装 div 而不是输入【参考方案3】:

如果您想在控制器内部设置属性,Acyra 的答案是正确的,但有很多不准确之处。

是的,您可以通过将attr 属性(在 2.1 版本中引入 here 和 here 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- 属性,这将非常有帮助。

【讨论】:

【参考方案4】:

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

public function configureOptions(OptionsResolver $resolver)

    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\MyEntity',
        'attr' => array(
            'class' => 'form-horizontal'
        )
    ));

【讨论】:

这应该是正确的答案,最好在表单类中而不是在树枝中这样做。【参考方案5】:
 form_widget(form.content,  'attr': 'class': 'tinyMCE', 'data-theme': 'advanced' )  

【讨论】:

【参考方案6】:

像这样:

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

【讨论】:

【参考方案7】:

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

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

【讨论】:

【参考方案8】:

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

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

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

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

【讨论】:

以上是关于如何将类属性设置为 Symfony2 表单输入的主要内容,如果未能解决你的问题,请参考以下文章

Symfony twig 如何将类添加到表单行

如何将类设置为 django 模型表单集中的列

Symfony2 表单和 <input> 模式属性

Symfony2:创建表单时如何设置表单域的值

如何将类属性设置为类方法返回类型?

如何在 Symfony2 中使用 setter 设置表单字段值