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 :

collectiontype symfony 3.4


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    collectiontype symfony 3.4
    Bonjour j'ai un problème quand je veux récupérer les données saisies dans le formulaire de collectiontype,
    lorsque je tape
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     $f = $form->getData();
                   dump($f);


    j'obtiens que les données de la 1er entité:

    PeiController.php on line 91:
    PeiTab {#469 ▼
    -NomEntreprise: "abc"
    -intervenants: ArrayCollection {#468 ▼
        -elements: []
      }
    }

    voici formtype de la 1er entité

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder   
                          ->add('NomEntreprise', TextType::class)
                           ->add('intervenants', CollectionType::class, array(
                        'entry_type' => IntervenantType::class,
                        'allow_add'    => true,
                        'allow_delete' => true,
                        'mapped' => false,
                        'prototype' => true,
                        'by_reference' => false,
                        'label' => false,
                    ));



    et les champs du deuxieme entity "intervenant" est

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nom', TextType::class)
            ->add('prenom',  TextType::class);
    }

  2. #2
    Membre averti
    Bonjour,

    J'ai plusieurs questions :

    - ta 1ère entité a-t-elle un attribut 'intervenants' de type collection (ce que je suppose en voyant ->add('intervenants'),
    - si oui, pourquoi as-tu fais 'mapped' => false'?
    - enfin, pourquoi fais-tu un getData() au lieu de simplement récupérer ton entité qui aura été hydratée par ton formulaire?

    Montre peut-être le code de ton entité, de ton formulaire en entier et de la fonction de ton controller.

  3. #3
    Futur Membre du Club
    bonjour merci pour votre réponse,
    oui effectivement ma 1er entitè contient l'attribut intervenants, j'ai fais la relation onetomany bidirectionnelle,

  4. #4
    Futur Membre du Club
    Voici le code de mon controller:

    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
     
    public function creerAction(Request $request)
     
      {
     
        $pei = new PeiTab();
        $form = $this->createForm(PeiTabType::class,$pei)
     
                ->add('Transmettre', SubmitType::class)
                ->add('Annuler', ResetType::class)
                ->add('Enregistrer', SubmitType::class);
        //handle the submit
        $form->handleRequest($request); 
     
        $em=$this->getDoctrine()->getManager();
        $alerte_dates=false; 
     
                 if ($form->isSubmitted()&& $form->isValid()){
     
                 if(($form->getClickedButton()&&'Transmettre'===$form->getClickedButton()->getName())){ 
              ///// pei prend comme valeur de taxonomie "validé"
                 $pei->getId();
                 $pei->setDateDemandeur(new \DateTime('now'));
                 $taxonomie=$em->getRepository(Taxonomie::class)->findOneBy(['etat'=> 'Transmis']);
                 $pei->setIdtaxonomie($taxonomie);
                 dump($pei);




    Et le code de la formType est:

    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
     
     
    public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
     
                    ->add('NomEntreprise', TextType::class)
                    ->add('intervenants', CollectionType::class, array(
                        'entry_type' => IntervenantType::class,
                        'allow_add'    => true,
                        'allow_delete' => true,
                        //'mapped' => false,
                        'prototype' => true,
                        'by_reference' => false,
                        'label' => false,
                    ));

  5. #5
    Futur Membre du Club
    Et voila le résultat qu'il m'affiche lorsque je fais dump($pei)

  6. #6
    Membre averti
    Dans ton PeiTabType.php, as-tu bien

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        public function configureOptions(OptionsResolver $resolver)
        {
     
            $resolver->setDefaults(
                                               [
                                                 'data_class' => Pei::class
                                               ]
                                             )
            ;
     
        }

  7. #7
    Futur Membre du Club
    Oui Normalement ça s'ajoute automatiquement lors de la création du controller

  8. #8
    Futur Membre du Club
    J'ai le code celui là


    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
     
     /**
         * {@inheritdoc}
         */
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'AppBundle\Entity\PeiTab'
            ));
        }
     
        /**
         * {@inheritdoc}
         */
        public function getBlockPrefix()
        {
            return 'appbundle_peitab';
        }