En caso de que alguien esté usando las funciones 'createNamedBuilder' o 'createNamed' del servicio form.factory, aquí está el fragmento de cómo configurar y guardar los datos usándolo. No puede usar el campo 'datos' (déjelo nulo) y debe establecer los datos / entidades pasados como $options
valor.
También incorporé instrucciones de @sarahg sobre el uso de las opciones setAllowedTypes () y setRequired () y parece funcionar bien, pero primero debes definir el campo con setDefined ()
También dentro del formulario, si necesita que se establezcan los datos, recuerde agregarlos al campo 'datos'.
En Controller estoy usando getBlockPrefix ya que getName quedó obsoleto en 2.8 / 3.0
Controlador:
$formTicket = $this->get('form.factory')->createNamed($tasksPerformedForm->getBlockPrefix(), TaskAddToTicket::class, null, array('ticket'=>$ticket) );
Formar:
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',
)
)
...
}