web-dev-qa-db-ja.com

クラス属性をSymfony2フォーム入力に設定する方法

<input>HTMLを使用して、classFormBuilder属性をフォームSymfony2に設定するにはどうすればよいですか?

このようなもの:

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

 {{ form_widget(form.birthdate) }}

属性inputcalendarに設定されたclassfieldが必要です

62

twigテンプレートからこれを行うことができます。

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

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

117
Problematic

FormBuilderで実行できます。これをFormBuilderの配列に追加します。

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

Acyraによる答えは、コントローラー内で属性を設定したい場合に正しい方法を導きますが、多くの不正確さがあります。

はい、FormBuilderでattr属性を使用して直接行うことができます(2.1バージョンでは here を、配列の配列には here 2. を導入)次のオプション:

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

「機能が壊れている」というのは事実ではありません。とてもうまくいきます!

Symfony2がHTML class属性をラベルと入力の両方に適用することは事実ではありません(少なくとも2.1バージョンから)。

さらに、attr属性は配列そのものであるため、フィールドにレンダリングするHTML属性を渡すことができます。 HTML5 data-属性を渡したい場合に非常に役立ちます。

27
JeanValjean

フォームクラスのオプションに追加できます。

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\MyEntity',
        'attr' => array(
            'class' => 'form-horizontal'
        )
    ));
}
5
segli
{{ form_widget(form.content, { 'attr': {'class': 'tinyMCE', 'data-theme': 'advanced'} })  }}
4
Kiran

このような:

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

上記の例に示すように、TwigまたはFormClassでこれを行うことができます。しかし、コントローラでフォームが取得するクラスを決定する必要がある場合があります。一般的にコントローラーにあまりロジックがないように注意してください!

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

特定のフィールドのHTMLウィジェットをレンダリングします。これをフォーム全体またはフィールドのコレクションに適用すると、基礎となる各フォーム行がレンダリングされます。

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

Form_row()の2番目の引数は変数の配列です。 Symfonyで提供されるテンプレートは、上記の例に示すようにラベルのみをオーバーライドできます。

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

0
Javier Morillo