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 :

Comment passer un argument du controleur à la class du formulaire [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 6
    Par défaut Comment passer un argument du controleur à la class du formulaire
    Bonjour,

    J'ai une class de formulaire :
    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
     
    namespace Amb\CreditBundle\Form;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolverInterface;
     
    class EncaissementType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
     
            $builder
                ->add('n_quitance', 'integer')
                ->add('mode_encaissement', 'choice', array(
                            'choices' => $mode_encaissement, 'data' => 1))
                ->add('type_encaissment', 'text')
                ->add('montant', 'money', array('precision' => 2, 'required' => true))
            ;
        }
     
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'Amb\CreditBundle\Entity\Encaissement'
            ));
        }
     
        public function getName()
        {
            return 'amb_creditbundle_encaissementtype';
        }
    }
    et j'ai une méthode dans mon controleur :
    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
     
    public function add_encaissementAction($appt)
        {
            $adhesion = $this->getDoctrine()
                               ->getRepository('AmbAdherentBundle:Adhesion')
                               ->find($appt);
     
            if($adhesion != null)
            {   
                $encaissement = new encaissement();
                $adherent = $adhesion->getAdherent();
     
                $encaissement->setDateOperation(new \Datetime());
                $encaissement->setAdhesion($adhesion);  
                $encaissement->setAdherent($adherent);
     
     
                $ambexceldb = $this->container->get('amb_credit.ambexceldb');
                $mode_encaissement = array(1 => 'choix1', 2 => 'choix2', 3 => 'choix3');
     
     
                $form = $this->createForm(new EncaissementType, $encaissement);
     
                $request = $this->get('request');
                if( $request->getMethod() == 'POST' )
                {
                    $form->bind($request);
                    if( $form->isValid() )
                    {   
                        $em = $this->getDoctrine()->getEntityManager();
                        $em->persist($encaissement);
                        $em->flush();
                        $encaissements = $adhesion->getEncaissements();
                        return $this->redirect( $this->generateUrl('ambcredit_listversement', array(
                            'appt' => $appt,
                            'adherent' => $adherent,
                            'adhesion' => $adhesion,
                            'encaissements' => $encaissements
                        )));
                    }
                }
            }
     
     
            return $this->render('AmbCreditBundle:Encaissement:add_encaissement.html.twig', array(
            'form' => $form->createView()
            ));
     
        }
    le problème ce que je veux passer le tableau $mode_encaissement (la ligne 19 de mon controleur) a ma class de formulaire (la ligne 16) , est je sais pas comment ?
    Est ce que quelqu'un peut m'aider SVP?
    la version du symfony est : 2.1.4

  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
    Bonjour,

    Je pense que tu t'y prends à l'envers. Il faut que tu rajoutes dans ton EncaissementType pour le add-> ->add('mode_encaissement', 'choice', array(
    'choices' => $mode_encaissement, 'data' => 1))
    ->add('mode_encaissement', 'choice', array(
    'choices' =>array(1 => 'choix1', 2 => 'choix2', 3 => 'choix3''))

    Et je pense que cela fera le job.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 6
    Par défaut
    Citation Envoyé par stephan.78 Voir le message
    Bonjour,

    Je pense que tu t'y prends à l'envers. Il faut que tu rajoutes dans ton EncaissementType pour le add-> ->add('mode_encaissement', 'choice', array(
    'choices' => $mode_encaissement, 'data' => 1))
    ->add('mode_encaissement', 'choice', array(
    'choices' =>array(1 => 'choix1', 2 => 'choix2', 3 => 'choix3''))

    Et je pense que cela fera le job.
    Oui exactement, vous avez totalement raison et merci pour votre intervention. mais moi à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array( 'choices' =>array(1 => 'choix1', 2 => 'choix2', 3 => 'choix3''))
    J'ai déja un tableau que j'ai récupérer a partir d'un fichier excel et je veux le transmettre comme paramètre à la class du formulaire. Est ce que vous pouvez m'aider dans ce sens ?

    Et merci d'avance.

  4. #4
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Ajoute un attribut avec ton choix, ainsi qu'un constructeur à ton formtype dans lequel tu lui passe ton tableau en paramètre.

    Dans ton 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
    class EncaissementType extends AbstractType
    {
        private $modeEncaissements;
     
        public function __construct($arrModeEncaissements)
        {
            $this->modeEncaissements = $arrModeEncaissements;
        }
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('n_quitance', 'integer')
                ->add('mode_encaissement', 'choice', array(
                            'choices' => $this->modeEncaissements, 'data' => 1))
                ->add('type_encaissment', 'text')
                ->add('montant', 'money', array('precision' => 2, 'required' => true))
            ;
        }
    }
    Dans ton contrôleur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $objEncaissement = new encaissement();
    //...
    $arrModeEncaissement = array(1 => 'choix1', 2 => 'choix2', 3 => 'choix3');
     
    $objForm = $this->createForm(new EncaissementType($arrModeEncaissement), $objEncaissement);
    ++

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 6
    Par défaut
    Citation Envoyé par Nico_F Voir le message
    Ajoute un attribut avec ton choix, ainsi qu'un constructeur à ton formtype dans lequel tu lui passe ton tableau en paramètre.

    Dans ton 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
    class EncaissementType extends AbstractType
    {
        private $modeEncaissements;
     
        public function __construct($arrModeEncaissements)
        {
            $this->modeEncaissements = $arrModeEncaissements;
        }
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('n_quitance', 'integer')
                ->add('mode_encaissement', 'choice', array(
                            'choices' => $this->modeEncaissements, 'data' => 1))
                ->add('type_encaissment', 'text')
                ->add('montant', 'money', array('precision' => 2, 'required' => true))
            ;
        }
    }
    Dans ton contrôleur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $objEncaissement = new encaissement();
    //...
    $arrModeEncaissement = array(1 => 'choix1', 2 => 'choix2', 3 => 'choix3');
     
    $objForm = $this->createForm(new EncaissementType($arrModeEncaissement), $objEncaissement);
    ++
    Merci beaucoup Nico_F, j'ai testé ta réponse et ça fonctionne bien .

  6. #6
    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
    Merci aussi de ma part, c'est une façon qui peux fonctionner pour d'autre problème que j'ai.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 20/08/2006, 12h32
  2. Réponses: 1
    Dernier message: 08/03/2006, 20h06
  3. Comment passer un argument a un programme et le recuperer
    Par Geant Vert dans le forum C++Builder
    Réponses: 4
    Dernier message: 13/02/2006, 16h32
  4. Comment passer des argument a un script php ?
    Par Florina dans le forum Linux
    Réponses: 2
    Dernier message: 11/12/2005, 14h38
  5. Comment passer les arguments à un script perl
    Par belgampaul dans le forum Langage
    Réponses: 4
    Dernier message: 06/08/2005, 12h52

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