次のフォームがあります。
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('type', ChoiceType::class, array(
'expanded' => true,
'multiple' => false,
'choices' => array(
'Friend' => 'friend',
'Guide' => 'guide'
)
));
}
フォームのレンダリング時にデフォルトでチェックされる'Friend'チェックボックスを作成するにはどうすればよいですか?
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:
フォームを作成すると、各フィールドには、フォームのドメインオブジェクトの対応するプロパティの値が最初に表示されます(オブジェクトがフォームにバインドされている場合)。フォームまたは個々のフィールドの初期値を上書きする場合は、データオプションで設定できます
空の値が必要な場合の更新:
以下の答えとして、デフォルト値を更新する必要がある場合は、data
をempty_data
に置き換えてください
使用 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 を使用することです。
エディションの値を上書きしたくない場合は、これを行うことができます:
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'
]);
});
}
Entityコンストラクターで初期値を設定する方が良いと思います。
public function __construct()
{
$this->exercises = new ArrayCollection();
$this->setTitle("WOCHE#") ;
$this->setYear(date('Y'));
$this->setWeekInCalendar(Week::getCurrentWeekInCalendar());
}