web-dev-qa-db-ja.com

選択フィールドのデフォルト値

次のフォームがあります。

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

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

フォームのレンダリング時にデフォルトでチェックされる'Friend'チェックボックスを作成するにはどうすればよいですか?

20
Alexander Lomia

dataオプションを試してみるべきだと思いますが、オブジェクト内にデータが保存されていない場合にのみ使用します。

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

 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'
        ));
    }

公式リンク

Extract

フォームを作成すると、各フィールドには、フォームのドメインオブジェクトの対応するプロパティの値が最初に表示されます(オブジェクトがフォームにバインドされている場合)。フォームまたは個々のフィールドの初期値を上書きする場合は、データオプションで設定できます

空の値が必要な場合の更新

以下の答えとして、デフォルト値を更新する必要がある場合は、dataempty_dataに置き換えてください

19
Pimento Web

使用 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 を使用することです。

16
Romain Bruckert

エディションの値を上書きしたくない場合は、これを行うことができます:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
        $form = $event->getForm();

        $form->add(
            'type', 
            ChoiceType::class,
            [
                'expanded' => true,
                'multiple' => false,
                'choices' => [
                    'Friend' => 'friend',
                    'Guide' => 'guide'
                ],
                'data' => $event->getData() ?: 'friend'
            ]);
    });
}
5
Fabien Salles

Entityコンストラクターで初期値を設定する方が良いと思います。

public function __construct()
{
    $this->exercises = new ArrayCollection();

    $this->setTitle("WOCHE#") ;

    $this->setYear(date('Y'));

    $this->setWeekInCalendar(Week::getCurrentWeekInCalendar());
}
2
Shadi Akil