【问题标题】:How to set a class attribute to a Symfony2 form input如何将类属性设置为 Symfony2 表单输入
【发布时间】: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 设置为 日历

【问题讨论】:

    标签: php forms symfony input formbuilder


    【解决方案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 版本中引入 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- 属性,这将非常有帮助。

    【讨论】:

      【解决方案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 参数。

            【讨论】:

              猜你喜欢
              • 2013-06-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-06-10
              • 1970-01-01
              • 1970-01-01
              • 2023-03-17
              • 2014-08-15
              相关资源
              最近更新 更多