W przypadku, gdy ktoś korzysta z funkcji „createNamedBuilder” lub „createNamed” z usługi form.factory, oto krótki opis sposobu ustawiania i zapisywania danych za ich pomocą. Nie możesz użyć pola „data” (pozostaw to puste) i musisz ustawić przekazane dane / encje jako $options
wartość.
Dodałem również instrukcje @sarahg dotyczące używania opcji setAllowedTypes () i setRequired () i wydaje się, że działa dobrze, ale najpierw musisz zdefiniować pole za pomocą setDefined ()
Również wewnątrz formularza, jeśli potrzebujesz ustawić dane, pamiętaj, aby dodać je do pola „dane”.
W kontrolerze używam getBlockPrefix, ponieważ getName zostało wycofane w wersji 2.8 / 3.0
Kontroler:
$formTicket = $this->get('form.factory')->createNamed($tasksPerformedForm->getBlockPrefix(), TaskAddToTicket::class, null, array('ticket'=>$ticket) );
Formularz:
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',
)
)
...
}