Выбор поля по умолчанию

У меня есть следующая форма:

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

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

Как я могу сделать «Друг» флажок должен быть установлен по умолчанию, когда форма отображается?

14

Решение

Использовать 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.

14

Другие решения

Я думаю, что вы должны попробовать 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 если вам нужно в любом случае обновить значение по умолчанию

14

Я думаю, что было бы лучше установить начальные значения в конструкторе Entity:

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

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

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

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

Если вы не хотите переопределять значение для издания, вы можете сделать это:

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'
]);
});
}
1
По вопросам рекламы [email protected]