Für den Fall, dass jemand die Funktionen 'createNamedBuilder' oder 'createNamed' aus dem Dienst form.factory verwendet, finden Sie hier einen Ausschnitt zum Festlegen und Speichern der Daten. Sie können das Feld 'Daten' nicht verwenden (lassen Sie diese Null) und müssen die übergebenen Daten / Entitäten als $options
Wert festlegen .
Ich habe auch @ sarahg-Anweisungen zur Verwendung der Optionen setAllowedTypes () und setRequired () eingefügt, und es scheint gut zu funktionieren, aber Sie müssen zuerst das Feld mit setDefined () definieren.
Wenn Sie die Daten festlegen möchten, müssen Sie sie auch innerhalb des Formulars zum Feld "Daten" hinzufügen.
In Controller verwende ich getBlockPrefix, da getName in 2.8 / 3.0 veraltet war
Regler:
/*
* @var $builder Symfony\Component\Form\FormBuilderInterface
*/
$formTicket = $this->get('form.factory')->createNamed($tasksPerformedForm->getBlockPrefix(), TaskAddToTicket::class, null, array('ticket'=>$ticket) );
Bilden:
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']);
//This is required to set data inside the form!
$options['data']['ticket']=$options['ticket'];
$builder
->add('ticket', HiddenType::class, array(
'data_class'=>'acme\TicketBundle\Entity\Ticket',
)
)
...
}