IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Passage d'option dans un formulaire [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut Passage d'option dans un formulaire
    Bonsoir,

    J'aimerais savoir déjà si c'est possible de passer des paramètre dans un formulaire par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $form = $this->createForm(new Entity, $entity, array('id' => $entity->getId()));
    et de quelle manière on la récupère dans le repository ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    class ConfBriquesType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {		
            $builder
                ->add('nom')
    			->add(
    				'etat',
    				'entity',
    				array(
    					'class' => 'MeteoApplisAdminBundle:ConfIndicateurs',
    					'property' =>'etat',
    					'empty_value' => ''
    				)
    			)
    			->add(
    				'applications',
    				'entity',
    				array(
    					'class' => 'MeteoApplisAdminBundle:ConfApplications',
    					'property' =>'nom',
    					'multiple' => 'true',
    					'query_builder' => function(\MeteoApplis\AdminBundle\Entity\ConfApplicationsRepository $er) use ($id){
    						return $er->createQueryBuilder('a')->where('a.brique is null')->orWhere('a.id = :id')->setParameter('id', $id)->orderBy('a.nom', 'ASC');
    					},
    				)
    			)
            ;
        }
     
    	public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'MeteoApplis\AdminBundle\Entity\ConfBriques'
            ));
        }
     
        public function getName()
        {
            return 'meteoapplis_adminbundle_confbriquestype';
        }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		$repository = $this->getDoctrine()->getManager()->getRepository('MeteoApplisAdminBundle:ConfBriques');
     
    		$brique = $repository->find($id);
     
    		$form = $this->createForm(new ConfBriquesType, $brique, array('id' => $brique->getId()));
    Merci.

  2. #2
    Membre émérite
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Par défaut
    Allez hop, trop longue la recherche sur internet

    http://stackoverflow.com/questions/6...to-formbuilder

    Bon dev

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut
    Si je pose une question, c'est que j'ai chercher avant, sinon j'irais pas sur les forum .. bref

    j'ai déjà vu le sujet que tu m'a montré, je ne comprend cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $form = $this
        ->get('form.factory')
        ->create(new ApplyStepOneFormType($this->company, $this->ad), $applicant);
    ->get('form.factory') sa correspond à quoi ??
    et $applicant ??

    Merci pour ta réponse

  4. #4
    Membre émérite
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Par défaut
    Allez je le fais avec ton code oki ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $form = $this->createForm(new ConfBriquesType($brique->getId()), $brique);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    class ConfBriquesType extends AbstractType
    {
     
        function __construct($id) {
      // et hop tu peux utiliser $this->id que tu as récupéré dans ton   
     // constructeur.
      // Pas tester mais c'est que cela veut dire dans le post.
        $this->id= $id;
    }
        public function buildForm(FormBuilderInterface $builder, array $options)
        {		
            $builder
                ->add('nom')
    			->add(
    				'etat',
    				'entity',
    				array(
    					'class' => 'MeteoApplisAdminBundle:ConfIndicateurs',
    					'property' =>'etat',
    					'empty_value' => ''
    				)
    			)
    			->add(
    				'applications',
    				'entity',
    				array(
    					'class' => 'MeteoApplisAdminBundle:ConfApplications',
    					'property' =>'nom',
    					'multiple' => 'true',
    					'query_builder' => function(\MeteoApplis\AdminBundle\Entity\ConfApplicationsRepository $er) use ($id){
    						return $er->createQueryBuilder('a')->where('a.brique is null')->orWhere('a.id = :id')->setParameter('id', $id)->orderBy('a.nom', 'ASC');
    					},
    				)
    			)
            ;
        }
     
    	public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'MeteoApplis\AdminBundle\Entity\ConfBriques'
            ));
        }
     
        public function getName()
        {
            return 'meteoapplis_adminbundle_confbriquestype';
        }
    }
    la réponse a ta question qu est ce que ->get('form.factory')

    quand tu fais $this->createform, c'est un raccourci de $this->get('form.factory')->create

    Et dans le controller, il y a plein de raccourci comme ça. Il faut regarder dans la classe étendu de controller qui est controller qui lui même containeraware

    et la tu trouve cette méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        public function createForm($type, $data = null, array $options = array())
        {
            return $this->container->get('form.factory')->create($type, $data, $options);
        }
    Pour $applicant dans l'exemple ben c'est l'objet

    Bon dev

  5. #5
    Membre éprouvé Avatar de anta_res
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Par défaut
    Dans le form tu as une variable $options qui sert justement à ça.
    Tu ne change rien dans ton appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $form = $this->createForm(new Entity, $entity, array('id' => $entity->getId()));
    Par contre dans le formType :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    class ConfBriquesType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {	
    	$id = $options['id'];
            $builder
                ->add('nom')
    			->add(
    				'etat',
    				'entity',
    				array(
    					'class' => 'MeteoApplisAdminBundle:ConfIndicateurs',
    					'property' =>'etat',
    					'empty_value' => ''
    				)
    			)
    			->add(
    				'applications',
    				'entity',
    				array(
    					'class' => 'MeteoApplisAdminBundle:ConfApplications',
    					'property' =>'nom',
    					'multiple' => 'true',
    					'query_builder' => function(\MeteoApplis\AdminBundle\Entity\ConfApplicationsRepository $er) use ($id){
    						return $er->createQueryBuilder('a')->where('a.brique is null')->orWhere('a.id = :id')->setParameter('id', $id)->orderBy('a.nom', 'ASC');
    					},
    				)
    			)
            ;
        }
     
    	public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'MeteoApplis\AdminBundle\Entity\ConfBriques',
                'id' => null,
            ));
        }
     
        public function getName()
        {
            return 'meteoapplis_adminbundle_confbriquestype';
        }
    }
    Et ça devrait fonctionner nikel

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    pourquoi passer par les options pour récupérer l'identifiant de ton entité ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $form = $this->createForm(new ConfBriquesType, $entity);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class ConfBriquesType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {	
    	$entity=$builder->getData()
            //ou bien 
            $entity=$options['data'];
     
             $id=$entity->getId();   
             //.....
        }
        //...
    }

    j'ai déjà vu le sujet que tu m'a montré, je ne comprend cette ligne :

    $form = $this
    ->get('form.factory')
    ->create(new ApplyStepOneFormType($this->company, $this->ad), $applicant);

    ->get('form.factory') sa correspond à quoi ??
    La méthode createForm du controller de base de symfony n'est qu'un raccourci vers ce code: https://github.com/symfony/symfony/b...ller.php#LC152
    en fait tu utilises déjà l'objet FormFactory sans le savoir

  7. #7
    Membre éprouvé Avatar de anta_res
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Par défaut
    Oui c'est vrai que pour récupéré des données de l'entité a laquelle est rattaché le formulaire pas la peine de passer pas les options.
    Dans ce cas la la solution d'arnooo999 est meilleur.

    Mais si tu veut passer d'autres paramètres à ton form alors passer par les options me semble être le meilleur moyen d'y arriver.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut
    Ok je vous remercie pour vos réponses.
    Elles fonctionnent toutes très bien.
    J'ai préféré utilisé la méthode avec les options.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $form = $this->createForm(new ConfBriquesType, $brique, array('id' => $brique->getId()));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
    	$id = $options['id'];
    	...
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
    	$resolver->setDefaults(array(
    		'data_class' => 'MeteoApplis\AdminBundle\Entity\ConfBriques',
    		'id' => null,
    	));
    }
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-A] Pb pour passage au suivant dans sous formulaire
    Par leadri dans le forum VBA Access
    Réponses: 6
    Dernier message: 02/03/2006, 11h20
  2. passage de variables dans un formulaire
    Par albo69 dans le forum Langage
    Réponses: 4
    Dernier message: 16/02/2006, 22h52
  3. Insertion bouton d'option dans un formulaire
    Par Le Rebel dans le forum Langage
    Réponses: 1
    Dernier message: 09/02/2006, 09h36
  4. Passage de parametre dans un formulaire
    Par Thom@s dans le forum Langage
    Réponses: 4
    Dernier message: 31/01/2006, 18h45
  5. Ordre de passage du focus, dans un formulaire
    Par Smint dans le forum Access
    Réponses: 4
    Dernier message: 24/09/2005, 11h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo