2016-03-03 30 views
8

私は次の形式を持っている:選択肢フィールドのデフォルト値

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
    ->add('type', ChoiceType::class, array(
     'expanded' => true, 
     'multiple' => false, 

     'choices' => array(
      'Friend' => 'friend', 
      'Guide' => 'guide' 
     ) 
    )); 
} 

がどのように私は「友達」を作ることができますフォームがレンダリングされるときにチェックボックスはデフォルトでチェックしますか?

答えて

7

私はあなたがdataオプションを試してみるべきだと思いますが、あなたのオブジェクトの中にデータが保存されていない場合でも、それは他のものを上書きするためです。

重要::作成アクションには適していますが、編集アクションには適していません。

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
     ->add('type', ChoiceType::class, array(
      'expanded' => true, 
      'multiple' => false, 

      'choices' => array(
       'Friend' => 'friend', 
       'Guide' => 'guide' 
      ), 
      'data' => 'friend' 
     )); 
    } 

Official link

エキス:フォームを作成する場合

、各フィールドには、最初に、フォームのドメインオブジェクト(存在する場合、オブジェクトの 対応するプロパティの値を表示しますフォームに結合された )。あなたが フォームまたは単に個々のフィールドの初期値を上書きする場合は、データオプション

+0

ありがとうございました!小文字の 'data' => 'friend'' –

+1

あなたと同じ状況で未来の人々のために更新しています。 – pbenard

+3

私はこれが安全だとは思わない:symfonyのドキュメントから> __データオプションは、レンダリング時に常にドメインデータ(オブジェクト)から取った値よりも優先されます。これは、フォームがすでに永続化されているオブジェクトを編集するときにオブジェクト値も上書きされ、フォームがサブミットされたときに値が失われることを意味します.__ – user2268997

6

使用empty_dataフォームフィールドオプションでそれを設定することができます。 (dataではなく、動的に設定しない限り、投稿されたデータは上書きされます)。

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
    ->add('type', ChoiceType::class, array(
     'expanded' => true, 
     'multiple' => false, 

     'choices' => array(
      'Friend' => 'friend', 
      'Guide' => 'guide' 
     ), 
     'empty_data' => 'friend' 
    )); 
} 

さらに、複雑なケースの別のオプションは、Sf Dynamic Form Eventsです。

関連する問題