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 :

Problème de mise à jour d'entité liée dans formulaires imbriqués


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 8
    Par défaut Problème de mise à jour d'entité liée dans formulaires imbriqués
    Bonjour à vous,

    Je viens vers vous suite à un problème de mise à jour d'un objet attribut d'un autre objet et d'une erreur sans doute liée lorsque je veux aller consulter les informations de mon formulaire dans le profiler.

    Situation :

    Deux classes : Regimen && RegimenLine.

    Lien entre les deux classes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        /**
         * @ORM\OneToMany(targetEntity="AM\CytowebBundle\Entity\RegimenLine", mappedBy="regimen", cascade={"persist"})
         */
        private $regimenLines;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        /**
         * @ORM\ManyToOne(targetEntity="AM\CytowebBundle\Entity\Regimen", inversedBy="regimenLines")
         * @ORM\JoinColumn(nullable=false)
         */
        private $regimen;
    Deux classes de Form :

    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
    class RegimenLineType extends AbstractType
    {
        /**
         * {@inheritdoc}
         */
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('dose',NumberType::class)
                ->add('inn', EntityType::class, array(
                    'class' => Inn::class,
                    'multiple' => false,
                    'expanded' => true,
                ));
        }
     
        /**
         * {@inheritdoc}
         */
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'AM\CytowebBundle\Entity\RegimenLine'
            ));
        }
     
        /**
         * {@inheritdoc}
         */
        public function getBlockPrefix()
        {
            return 'am_cytowebbundle_regimenline';
        }
     
     
    }
    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
    class RegimenType extends AbstractType
    {
        /**
         * {@inheritdoc}
         */
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('name', TextType::class)
                ->add('regimenLines', CollectionType::class, array(
                    'entry_type'   => RegimenLineType::class,
                    'allow_add'    => true,
                    'allow_delete' => true
                ))
                ->add('save',      SubmitType::class);
        }
     
        /**
         * {@inheritdoc}
         */
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'AM\CytowebBundle\Entity\Regimen'
            ));
        }
     
        /**
         * {@inheritdoc}
         */
        public function getBlockPrefix()
        {
            return 'am_cytowebbundle_regimen';
        }
     
     
    }
    J'ai donc imbriqué un formulaire dans un autre en adaptant le code du tutoriel Symfony 3 en utilisant le Javascript qui permet de générer dynamiquement des formulaires à partir du code contenu dans data-prototype (ça fonctionne visuellement et sans erreur JS dans la console).

    Nom : formulaire.png
Affichages : 156
Taille : 6,1 Ko

    Premier problème : lorsque je rempli le formulaire, je dois rajouter le foreach suivant dans le controleur sinon ça écrit une erreur :

    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
            if ($request->isMethod('POST')){
                $form->handleRequest($request);
                if ($form->isValid()) {
                    $em = $this->getDoctrine()->getManager();
                    foreach ($regimen->getRegimenLines() as $regimenLine){
                        $regimenLine->setRegimen($regimen);
                    }
                    $em->persist($regimen);
                    $em->flush();
     
                    $request->getSession()->getFlashBag()->add('info', 'Schéma bien enregistré.');
     
                    return $this->redirectToRoute('am_cytoweb_regimen', array('id' => $regimen->getId()));
                }
            }
    L'erreur sans le foreach :

    Nom : errsymfony.png
Affichages : 133
Taille : 6,7 Ko

    ça ne m'inquieterait pas outre mesure si le code exemple du tuto que j'ai suivi n'avait pas besoin lui de faire cette boucle.

    De plus, lorsque je met le foreach, j'ai un problème à l'effacement d'une ligne dynamique : visuellement, le DOM est bien modifié mais pas dans l'entité lorsque je soumet le formulaire (le formulaire est bien soumis sans erreur, mais l'entité n'est pas modifiée).

    Enfin, lorsque je vais dans le profiler dans la partie "form", j'ai l'erreur suivante :

    Nom : errform.png
Affichages : 129
Taille : 9,3 Ko

    Encore un problème d'ID ... J'ai bien les méthodes getId() de mes entités.

    PS : j'ai bien modifier le addRegimenLine comme conseillé dans le tuto suivi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        public function addRegimenLine(\AM\CytowebBundle\Entity\RegimenLine $regimenLine)
        {
            $regimenLine->setRegimen($this);
            $this->regimenLines[] = $regimenLine;
     
            return $this;
        }

    Je vous remercie pour votre aide car ma recherche google sur l'erreur ID, bien qu'explicite, ne m'aide pas des masses à debuguer vu que j'ai bien les méthodes getId() dans mes entités.

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2003
    Messages : 307
    Par défaut
    Je sais pas si ça change quelque chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            $this->regimenLines[] = $regimenLine;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            $this->regimenLines->add($regimenLine);
    Tu as bien en public ton getId ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/08/2013, 19h46
  2. [Core] Problème de mise à jour avec tables liées
    Par mithrendil dans le forum Hibernate
    Réponses: 11
    Dernier message: 06/07/2012, 15h32
  3. Problème de mise à jour d'un champ dans bdd
    Par Tommy57 dans le forum VB.NET
    Réponses: 5
    Dernier message: 17/09/2010, 08h57
  4. [AC-2003] problème de mise à jour des champs disponibles dans TCD
    Par patbeautifulday dans le forum IHM
    Réponses: 3
    Dernier message: 03/03/2010, 08h59
  5. Réponses: 1
    Dernier message: 24/04/2006, 16h16

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