passaggio di dati dal controller a Type symfony2

se mostro un campo di tipo ” quadro” nel mio modulo, e voglio filtrare questo tipo di quadro sulla base di un argomento che passo dal controller, come faccio a farlo ..?

//PlumeOptionsType.php public function buildForm(FormBuilder $builder, array $options) { $builder->add('framePlume', 'entity', array( 'class' => 'DessinPlumeBundle:PhysicalPlume', 'query_builder' => function(EntityRepository $er) { return $er->createQueryBuilder('pp') ->where("pp.profile = :profile") ->orderBy('pp.index', 'ASC') ->setParameter('profile', ????) ; }, )); } public function getName() { return 'plumeOptions'; } public function getDefaultOptions(array $options) { return array( 'data_class' => 'Dessin\PlumeBundle\Entity\PlumeOptions', 'csrf_protection' => true, 'csrf_field_name' => '_token', // a unique key to help generate the secret token 'intention' => 'plumeOptions_item', ); } } 

e all’interno del controller, creo il modulo:

 i have that argument that i need to pass in my action code: $profile_id = $this->getRequest()->getSession()->get('profile_id'); ... and then i create my form like this $form = $this->createForm(new PlumeOptionsType(), $plumeOptions); 

$ plumeOptions è solo una class da perseguire. Ma ha una relazione uno-a-uno con un’altra class chiamata PhysicalPlume. Ora, quando voglio visualizzare ‘framePlume’ nel mio codice, voglio mostrare un’entity framework PhysicalPlume filtrata.

È ansible passare parametri alla class form come segue:

 //PlumeOptionsType.php protected $profile; public function __construct (Profile $profile) { $this->profile = $profile; } 

Quindi usalo nel query_builder del tuo buildForm:

 $profile = $this->profile; $builder->add('framePlume', 'entity', array( 'class' => 'DessinPlumeBundle:PhysicalPlume', 'query_builder' => function(EntityRepository $er) use ($profile) { return $er->createQueryBuilder('pp') ->where("pp.profile = :profile") ->orderBy('pp.index', 'ASC') ->setParameter('profile', $profile) ; }, )); 

E finalmente nel tuo controller:

 // fetch $profile from DB $form = $this->createForm(new PlumeOptionsType($profile), $plumeOptions); 

Puoi usare $plumeOptions per passare tutto il tuo argomento, ma dovrai aggiungere un getDefaultOptions() in PlumeOptionsType per specificare il valore predefinito per la tua opzione. Vedi ad esempio https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Form/Extension/Core/Type/CheckboxType.php per vedere come dovrebbe essere questo metodo.