Jika ada yang menggunakan fungsi 'createNamedBuilder' atau 'createNamed' dari layanan form.factory, berikut cuplikan tentang cara menyetel dan menyimpan data menggunakannya. Anda tidak dapat menggunakan bidang 'data' (biarkan nol) dan Anda harus menyetel data / entitas yang diteruskan sebagai $options
nilai.
Saya juga memasukkan instruksi @sarahg tentang menggunakan opsi setAllowedTypes () dan setRequired () dan tampaknya berfungsi dengan baik tetapi Anda harus terlebih dahulu menentukan bidang dengan setDefined ()
Juga di dalam formulir jika Anda membutuhkan data untuk disetel, ingatlah untuk menambahkannya ke bidang 'data'.
Di Controller saya menggunakan getBlockPrefix karena getName sudah tidak digunakan lagi di 2.8 / 3.0
Pengontrol:
$formTicket = $this->get('form.factory')->createNamed($tasksPerformedForm->getBlockPrefix(), TaskAddToTicket::class, null, array('ticket'=>$ticket) );
Bentuk:
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',
)
)
...
}