Я не думаю, что вам следует использовать опцию data
, потому что это больше, чем просто установка значения по умолчанию.Вы также переопределяете любые данные, которые передаются в форму во время создания.В общем, вы нарушаете поддержку этой функции.- Что может не иметь значения, когда вы позволяете пользователю создавать данные, но имеет значение, когда вы хотите (когда-нибудь) использовать форму для обновления данных.
См. http://symfony.com/doc/current/reference/forms/types/choice.html#data
Я считаю,было бы лучше передать любые данные по умолчанию при создании формы.В контроллере.
Например, вы можете передать класс и определить значение по умолчанию в вашем классе.(при использовании по умолчанию Symfony\Bundle\FrameworkBundle\Controller\Controller
)
$form = $this->createForm(AnimalType::class, [
'species' => 174 // this id might be substituted by an entity
]);
Или при использовании объектов:
$dog = new Dog();
$dog->setSpecies(174); // this id might be substituted by an entity
$form = $this->createForm(AnimalType::class, $dog);
Еще лучше при использовании фабрики: (где собака, вероятно, происходит от животного)
$form = $this->createForm(AnimalType::class, DogFactory::create());
Это позволит вам отделить структуру формы и содержимое друг от друга и сделать вашу форму многократно используемой в других ситуациях.
Или используйте параметр preferred_choices
, но он имеетпобочный эффект перемещения опции по умолчанию в верхнюю часть формы.
См .: http://symfony.com/doc/current/reference/forms/types/choice.html#preferred-choices
$builder->add(
'species',
'entity',
[
'class' => 'BFPEduBundle:Item',
'property' => 'name',
'query_builder' => ...,
'preferred_choices' => [174] // this id might be substituted by an entity
]
);