У меня есть следующая форма:
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
опция поля формы. (не 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.
Я думаю, что вы должны попробовать 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'
));
}
экстракт :
При создании формы каждое поле первоначально отображает значение
соответствующее свойство объекта домена формы (если объект
привязан к форме). Если вы хотите переопределить начальное значение для
Форма или просто отдельное поле, вы можете установить его в опции данных
ОБНОВЛЕНИЕ, если вам нужна пустая стоимость:
Как ответ ниже, замените data
с empty_data
если вам нужно в любом случае обновить значение по умолчанию
Я думаю, что было бы лучше установить начальные значения в конструкторе Entity:
public function __construct()
{
$this->exercises = new ArrayCollection();
$this->setTitle("WOCHE#") ;
$this->setYear(date('Y'));
$this->setWeekInCalendar(Week::getCurrentWeekInCalendar());
}
Если вы не хотите переопределять значение для издания, вы можете сделать это:
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'
]);
});
}