Я добавляю поля в проект, основанный на проекте, основанном на Symfony 2 и Sonata. Я пытаюсь следовать инструкциям этот ответ. В один из моих административных классов я вставил следующий код:
$default = 'Germany';
if (!$this->getUser()->hasRole(User::CONTENT_SUPPLIER)) {
$formMapper
->tab('Distribution')
->with('Distribution')
->add(
'module',
null,
[
'empty_data' => $default,
]
)
->add(
'distributions',
'distribution_list',
[
'label' => false,
'required' => 'false',
'disabled' => true
]
)
->add('plannedDistributions')
->end()
->end()
;
}
... и хотя я ожидаю увидеть ссылку на объект "Германия" по умолчанию в моей форме, вместо этого я вижу пустое поле. Должен ли я передавать объект, а не строку? Возможно ли то, что я пытаюсь сделать? Что я здесь неправильно делаю?






Думаю, вы упустили важный момент в документации по empty_data:
This option determines what value the field will return when the submitted value is empty (or missing). It does not set an initial value if none is provided when the form is rendered in a view.
This means it helps you handling form submission with blank fields.
Это означает, что empty_data заполнит вашу модель данными, когда форма была отправлена без значения по умолчанию.
Я не знаком с $formMapper, используемым в вашем фрагменте, но в типичном Symfony-Controller вы можете создать свою форму следующим образом:
$form = $this->createForm(MyForm::class, $initialData);
В этом случае $initialData содержит свойство Distribution со значением Germany. В качестве альтернативы вы можете попробовать указать ценность в своем интерфейсе.
Чтобы установить данные по умолчанию, используйте опцию «данные». Образец:
//Use block
use Symfony\Component\Form\Extension\Core\Type\TextType;
//...
$formMapper
->add('module', TextType::class,[
'data' => 'Gearmany',
]);