2011-07-18 15 views
55

HTMLclass属性をフォーム<input>に設定するには、FormBuilderSymfony2に入力しますか?このようなクラス属性をSymfony2フォーム入力に設定する方法

何か:

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

{{ form_widget(form.birthdate) }} 

私はあなたが小枝テンプレートからこれを行うことができますカレンダー

答えて

106

に属性class設定して、このinputフィールドをしたい:

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

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

+40

これは実際の質問に対する答えではありません.PhotoBuilderの全体的なポイントは、Twigテンプレートを手作業でコーディングすることを避けることです。 – Acyra

+19

@Acyraそれは依存しています...ビュー関連のものをフォームビルダーに投げ込むことは最良の方法ではありません。 – Eugene

+6

私は同意する、フォームのカスタマイズは、ビューではなく、コントローラ内に存在する必要があります。コントローラーはできるだけ軽くなければなりません。Symfony2があなたのためのフォームを作成するのはとても素晴らしいですが、それは時間が大幅に節約されます。「ファンシー」UIで作業しているときに、フォームビルダーが途中降機に陥ることがあります。 – ILikeTacos

108

FormBuilderで行うことができます。あなたのFormBuilderの配列にこれを追加します。

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

このクラスをラップするdivに入力しないでください –

+3

これはもう真実ではありません(symfony 3+) – jrmgx

27

答えをAcyraことにより、あなたは、コントローラ内の属性を設定したい場合は右の道をリードし、多くの不正確さを持っています。それは真実ではありません

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

次のように

はい、あなたは、オプションの配列に(2.1バージョンとhere for the 2.0ためhere導入)attr属性を使用してFormBuilderで直接それを行うことができます"機能が壊れています"。それは非常にうまくいく!

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するための第2引数は、変数の配列です。 symfonyに用意されているテンプレートは、上の例のようにラベルを上書きすることしかできません。

変数の引数については、「フォーム変数の詳細」を参照してください。

関連する問題