No caso de alguém estar usando as funções 'createNamedBuilder' ou 'createNamed' do serviço form.factory, aqui está o trecho sobre como definir e salvar os dados usando-o. Você não pode usar o campo 'dados' (deixe nulo) e você deve definir os dados / entidades passados como $options
valor.
Eu também incorporei instruções @sarahg sobre como usar as opções setAllowedTypes () e setRequired () e parece funcionar bem, mas primeiro você precisa definir o campo com setDefined ()
Também dentro do formulário, se você precisar que os dados sejam configurados, lembre-se de adicioná-los ao campo 'dados'.
No controlador, estou usando getBlockPrefix, pois getName foi preterido em 2.8 / 3.0
Controlador:
$formTicket = $this->get('form.factory')->createNamed($tasksPerformedForm->getBlockPrefix(), TaskAddToTicket::class, null, array('ticket'=>$ticket) );
Formato:
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',
)
)
...
}