2016-01-12 13 views
10

Ho una forma in Symfony3, che inizializzo - seguendo la documentazione - come segue:Symfony3: Costruire FormType

$form=$this->createForm(BookingType::class,$booking); 

$ prenotazione è un'entità già esistente, che voglio modificare - ma voglio modificare il modulo a seconda dell'entità - come:

public function buildForm(FormBuilderInterface $builder,$options) { 
    $builder->add('name'); 
    if(!$this->booking->getLocation()) { 
     $builder->add('location'); 
    } 
} 

Prima Symfony 2.8 è stato possibile costruire il FormType come:

$form=$this->createForm(new BookingType($booking),$booking); 

Che è esattamente quello che voglio :) Ma in Symfony3 questo metodo genera un'eccezione. Come posso passare un'entità al mio tipo di modulo?

+1

È possibile utilizzare gli eventi di forma per questo: http://symfony.com/doc/current/components/form/ form_events.html – xabbuh

+3

Nel tuo formType penso che tu possa fare '$ entity = $ builder-> getData()' – pbenard

+0

@ Put12co22mer2 questo è tutto - funziona bene! – cklm

risposta

6

È inoltre possibile modificare un tipo di modulo in base alle opzioni personalizzate.

Nel tipo di modulo:

public function buildForm(FormBuilderInterface $builder, $options) { 
    $builder->add('name'); 

    if($options['localizable']) { 
     $builder->add('location'); 
    } 
} 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'localizable' => true, 
    )); 
} 

Nel controllore:

$form = $this->createForm(BookingType::class, $booking, array(
    'localizable' => !$booking->getLocation(), 
)); 
+0

Funziona per me, grazie mille, non ricordavo come cambiare le opzioni di default! –