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 :

Formulaire, entité écrase les anciennes


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Formulaire, entité écrase les anciennes
    Bonjour,

    Je suis débutant et essaye de développer une application web avec symfony2.

    J'ai plusieurs entités, dont parmis elles les entités User et Rencontre.
    J'ai créé un formulaire qui permet de créer une nouvelle rencontre et d'y ajouter des Users.

    Dans mon controller je crée l'objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // Dans mon controller
    $rencontre = new rencontre($user); // $user étant le User connecté qui crée la rencontre
    $form = $this->createForm(new RencontreType($user), $rencontre); // le formulaire
    $formHandler = new RencontreHandler($form, $this->get('request'), $this->getDoctrine()->getEntityManager());
     
     
    // Le constructeur de mon entité Rencontre 
    public function __construct($createur){
        $this->membres = new \Doctrine\Common\Collections\ArrayCollection; // Collection de User
        $this->membres[] = $createur;   
        $this->idCreateur = $createur->getId();
    }
    Mon constructeur fonctionne puisque j'enregistre bien L'id du créateur passé en argument.
    Mais lorsque je valide le formulaire, celui-ci efface le contenu de $membres pour y mettre soit les User que j'ai ajouté avec le formulaire, soit pour mettre un contenu vide si je n'ai pas ajouté de User depuis le formulaire.

    Et j'ai le même problème pour une autre fonctionnalité de mon application.
    J'ai l'impression que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $this->membres[] = $createur;
    ne rempli pas son rôle et remplace le contenu au lieu d'ajouter en fin de tableau...

    Quelqu'un serait-il comment résoudre ce problème ?
    Je voudrais que $membres contiennent (User) Createur ET les Users ajouté depuis le formulaire.

    Merci d'avance

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    ça devrai être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->addMembre($createur);
    et suprime

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->membres = new \Doctrine\Common\Collections\ArrayCollection;

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Cela ne change rien de mettre
    $this->addMembre($createur);
    et retirer l'initialisation me donne cette erreur :

    Expected argument of type "Doctrine\Common\Collections\Collection", "array" given

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    faut bien configurer ton entité, montre la

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    J'ai laissé que les attributs qui nous intéresse

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    <?php
     
    namespace AppFoot\generalBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\Validator\Constraints as Assert;
    use AppFoot\UserBundle\Entity\User;
     
    /**
     * AppFoot\generalBundle\Entity\Rencontre
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="AppFoot\generalBundle\Entity\RencontreRepository")
     */
    class Rencontre
    {
     
     
         /**
         *@ORM\ManyToMany(targetEntity="AppFoot\UserBundle\Entity\User")
         */
        private $membres;
     
        /**
         * @var integer $id
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        public function __construct($capitaine)
        {
            $this->membres = new \Doctrine\Common\Collections\ArrayCollection;
            $this->addMembre($capitaine);
     
        }
     
        public function getMembres()
        {
            return $this->membres;
        }
     
        /**
         * Get id
         *
         * @return integer 
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Add membres
         *
         * @param AppFoot\UserBundle\Entity\User $membres
         */
        public function addMembre(\AppFoot\UserBundle\Entity\User $membres)
        {
            $this->membres[] = $membres;
        }
    }

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Mais Rencontre n'est pas lié a User ? un OneToMany sur le champs id_createur

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    non non, le créateur c'est un user comme les autres que je voudrai rajouter dans mon tableau $membres à un moment donner dans la création d'une rencontre.

    la je viens de coder une autre action dans le controller
    rejoindreAction()
    ou je récupère le User connecté et je l'ajoute à la rencontre, donc à la suite du tableau, et là ca fonctionne bien :
    $user = $this->container->get('security.context')->getToken()->getUser();
    $rencontre = $this->getDoctrine()->getEntityManager()->getRepository('AppFootgeneralBundle:Rencontre')->find($id_rencontre);
    $rencontre->addMembre($user);
    $em = $this->getDoctrine()->getEntityManager();
    $em->persist($rencontre);
    $em->flush();
    j'ai vraiment l'impression que cest le field 'membre' de mon formulaire qui remet à zero mon tableau $membre avant d'y ajouter les User séléctionné dans le formulaire..

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par BryNtip Voir le message
    non non, le créateur c'est un user comme les autres que je voudrai rajouter dans mon tableau $membres à un moment donner dans la création d'une rencontre.
    justement il doit être lié

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    pourquoi ?
    Je ne remet pas en question ce que tu dis c'est pour comprendre.

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    que le User peux avoir plusieurs rencontre, donc tu t'y prends a l'envers
    tu dois faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $user->addRencontre($rencontre);
    a part

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->membres = new \Doctrine\Common\Collections\ArrayCollection;
    tu ne dois avoir rien d'autre dans le constructeur, tout le reste est gérer par l'ORM

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Et le user ainsi ajouté ( addRencontre($User) ) il sera bien présent dans ma liste $membres de mon objet rencontre ? parce que c'est tout ce dont j'ai besoin.

    Si un User A crée une rencontre en invitant User B et User C, la liste $membres de la rencontre contient User B et User C. Si par la suite, tjs connecté en tant que User A, je trouve la rencontre et la rejoins, alors ma liste aura bien User B C et A. Donc ça fonctionne comme ça, avec les relations actuel.
    Ce que je voudrais c'est que directement à la création la liste $membres contiennent User A B C car c'est logique que A y participe si il l'a créé ...

    A un autre moment j'ai le même problème.
    Mes entités User sont relié entre elles par une ManyToMany réflective.
    Mon User A peut posséder un lien d'amitier avec B et C, si j'arrive et que depuis le formulaire j'ajoute D et E, B et C seront effacé et la liste d'ami de A seront D et E.

    J'ai vrmt l'impression que ca vient du formulaire.
    Merci quand même !

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/03/2015, 17h16
  2. formulaire garde les anciennes valeurs
    Par psycho_xn dans le forum JSF
    Réponses: 11
    Dernier message: 15/09/2008, 18h32
  3. Où telecharger les anciennes versions de JDK?
    Par hugobob dans le forum Langage
    Réponses: 2
    Dernier message: 13/10/2005, 06h01
  4. Formulaires : problème avec les slashes et les quotes
    Par GarGamel55 dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 15h59
  5. [7RC3] Compatibilité avec les anciennes versions ...
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 3
    Dernier message: 15/05/2003, 16h46

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