Якщо хтось використовує функції 'createNamedBuilder' або 'createNamed' із служби form.factory, ось фрагмент, як встановити та зберегти дані, використовуючи його. Ви не можете використовувати поле "дані" (залиште це значення нулем), і вам потрібно встановити передані дані / сутності як $options
значення.
Я також включив інструкції @sarahg щодо використання параметрів setAllowedTypes () та setRequired (), і це, здається, працює нормально, але спочатку потрібно визначити поле за допомогою setDefined ()
Також всередині форми, якщо вам потрібно встановити дані, не забудьте додати їх у поле "дані".
У Controller я використовую 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',
)
)
...
}