<input>
のHTML
を使用して、class
FormBuilder
属性をフォームSymfony2
に設定するにはどうすればよいですか?
このようなもの:
->add('birthdate', 'date',array(
'input' => 'datetime',
'widget' => 'single_text',
'attr' => array(
'class' => 'calendar'
)
))
{{ form_widget(form.birthdate) }}
属性input
がcalendarに設定されたclass
fieldが必要です
twigテンプレートからこれを行うことができます。
{{ form_widget(form.birthdate, { 'attr': {'class': 'calendar'} }) }}
から http://symfony.com/doc/current/book/forms.html#rendering-each-field-by-hand
FormBuilderで実行できます。これをFormBuilderの配列に追加します。
'attr'=> array('class'=>'span2')
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-
属性を渡したい場合に非常に役立ちます。
フォームクラスのオプションに追加できます。
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\MyEntity',
'attr' => array(
'class' => 'form-horizontal'
)
));
}
{{ form_widget(form.content, { 'attr': {'class': 'tinyMCE', 'data-theme': 'advanced'} }) }}
このような:
{{ 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'
]
]);
特定のフィールドのHTMLウィジェットをレンダリングします。これをフォーム全体またはフィールドのコレクションに適用すると、基礎となる各フォーム行がレンダリングされます。
{# render a field row, but display a label with text "foo" #} {{ form_row(form.name, {'label': 'foo'}) }}
Form_row()の2番目の引数は変数の配列です。 Symfonyで提供されるテンプレートは、上記の例に示すようにラベルのみをオーバーライドできます。
変数の引数については、「フォーム変数の詳細」を参照してください。