2011-07-18 33 views
55

如何使用Symfony2中的FormBuilderHTMLclass屬性設置爲<input>如何將class屬性設置爲Symfony2表單輸入

事情是這樣的:

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

{{ form_widget(form.birthdate) }} 

我想這input字段屬性class設置爲日曆

回答

106

您可以從樹枝模板做到這一點:

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

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

+40

這真的不是問題的答案 - FormBuilder的全部要點是避免手工編寫Twig模板。 – Acyra

+19

@Acyra它依賴於......將大量視圖相關的東西扔到表單生成器中也不是最好的方法。 – Eugene

+6

我同意,表單定製應該在視圖中,而不是在控制器中。控制器應該儘可能輕鬆,雖然Symfony2爲你創建窗體非常棒,而且這是一個巨大的節省時間,當你使用「花哨的」UI時,有時候窗體構建器會妨礙你。 – ILikeTacos

108

你可以用FormBuilder來做到這一點。在此FormBuilder添加到數組:

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

這不是輸入 –

+3

這不是真的(symfony 3+) – jrmgx

27

通過Acyra答案引領正確的方式,如果你想設置控制器中的屬性,但是有很多不準確。

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

這是不正確的是:

是的,您可以直接與FormBuilder使用attr屬性(介紹here爲2.1版本,並here for the 2.0)以選項的排列如下做到這一點「功能已損壞」。它工作得很好!

Symfony2將HTML class屬性應用於標籤和輸入(至少是2.1版本)是不正確的。

此外,由於attr屬性本身就是一個數組,因此您可以傳遞想要爲該字段呈現的任何HTML屬性。如果您想要通過HTML5 data-屬性,這非常有用。

+1

Sf2.1修復了我提到的錯誤;我已經更新了我的答案。 – Acyra

+1

@Acyra我看到... – JeanValjean

4
{{ form_widget(form.content, { 'attr': {'class': 'tinyMCE', 'data-theme': 'advanced'} }) }} 
3

像這樣:

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

您可以在表單類的選項添加:

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

渲染某一領域的HTML控件。如果您將其應用於整個表單或字段集合,則會呈現每個基礎表單行。

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

的第二個參數form_row()是一個變量數組。 Symfony中提供的模板只允許覆蓋標籤,如上例所示。

請參閱「關於表單變量的更多信息」以瞭解變量參數。

相關問題