Если кто-то использует функции createNamedBuilder или createNamed из службы form.factory, вот фрагмент о том, как установить и сохранить данные с его помощью. Вы не можете использовать поле 'data' (оставьте это значение null), и вы должны установить переданные данные / объекты как $options
значение.
Я также включил инструкции @sarahg об использовании параметров setAllowedTypes () и setRequired (), и, похоже, он работает нормально, но сначала вам нужно определить поле с помощью setDefined ()
Также внутри формы, если вам нужно установить данные, не забудьте добавить их в поле «данные».
В контроллере я использую getBlockPrefix, поскольку getName устарело в 2.8 / 3.0
Контроллер:
$formTicket = $this->get('form.factory')->createNamed($tasksPerformedForm->getBlockPrefix(), TaskAddToTicket::class, null, array('ticket'=>$ticket) );
Форма:
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefined('ticket');
$resolver->setRequired('ticket');
$resolver->addAllowedTypes('ticket', Ticket::class);
$resolver->setDefaults(array(
'translation_domain'=>'AcmeForm',
'validation_groups'=>array('validation_group_001'),
'tasks' => null,
'ticket' => null,
));
}
public function buildForm(FormBuilderInterface $builder, array $options) {
$this->setTicket($options['ticket']);
$options['data']['ticket']=$options['ticket'];
$builder
->add('ticket', HiddenType::class, array(
'data_class'=>'acme\TicketBundle\Entity\Ticket',
)
)
...
}