Bonjour,
Énoncé du problème :
Deux entités : Operation et User (FOSUserBundle)
Type de relation entre les entités : ManyToMany Bidirectionnelle
Ce qui fonctionne :
- Création d'une opération (opération immobilière) en lui affectant des utilisateurs.
- Affichage d'une opération : montre bien la liste des utilisateurs rattachés à l'opération,
- Affichage d'un utilisateur : montre bien la liste des opérations rattachées à l'utilisateur.
Le problème :
Lors de la création d'un utilisateur en lui affectant des opérations => l'utilisateur est bien créé mais les opérations ne s'enregistrent pas.
Ci-joint le code de la méthode ajouterUserAction() ainsi que celui des l'entités User et Operation , si vous voulez voir d'autres parties du code demandez-le moi :
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 public function ajouterUserAction() { $userManager = $this->get('fos_user.user_manager'); $user = $userManager->createUser(); $form = $this->createForm(new UserType(), $user); $request = $this->getRequest(); if ($request->getMethod() == 'POST') { $form->bind($request); if ($form->isValid()) { $user->setEnabled(true); $userManager->updateUser($user); $this->get('session')->getFlashBag()->add('info', 'Utilisateur bien ajoutée'); return $this->redirect($this->generateUrl('assetreportmanager_voirUser', array('id' => $user->getId()))); } } return $this->render('AssetReportManagerBundle:ReportManager:ajouterUser.html.twig', array('form' => $form->createView(),)); }
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
66
67
68
69
70
71
72
73
74
75
76 namespace Asset\UserBundle\Entity; use FOS\UserBundle\Entity\User as BaseUser; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="user") */ class User extends BaseUser { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @ORM\ManyToMany(targetEntity="Asset\ReportManagerBundle\Entity\Operation", mappedBy="users", cascade={"persist"}) */ private $operations; // Ici commentaires prend un « s », car un article a plusieurs operations ! /** * Constructor */ public function __construct() { parent::__construct(); $this->operations = new \Doctrine\Common\Collections\ArrayCollection(); } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Add operations * * @param \Asset\ReportManagerBundle\Entity\Operation $operations * @return User */ public function addOperation(\Asset\ReportManagerBundle\Entity\Operation $operations) { $this->operations[] = $operations; return $this; } /** * Remove operations * * @param \Asset\ReportManagerBundle\Entity\Operation $operations */ public function removeOperation(\Asset\ReportManagerBundle\Entity\Operation $operations) { $this->operations->removeElement($operations); } /** * Get operations * * @return \Doctrine\Common\Collections\Collection */ public function getOperations() { return $this->operations; } }Merci de votre aide.
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166 namespace Asset\ReportManagerBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; /** * Asset\ReportManagerBundle\Entity\Operation * * @ORM\Table() * @ORM\Entity(repositoryClass="Asset\ReportManagerBundle\Entity\OperationRepository") */ class Operation { /** * @var integer $id * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") * */ private $id; /** * @var string $nom * * @ORM\Column(name="nom", type="string", length=255) * @Assert\NotBlank() * */ private $nom; /** * @var string $description * * @ORM\Column(name="description", type="string", length=255) * * */ private $description; /** * @ORM\OneToOne(targetEntity="Asset\ReportManagerBundle\Entity\Image", cascade={"persist", "remove"}) */ private $image; /** * @ORM\ManyToMany(targetEntity="Asset\UserBundle\Entity\User", inversedBy="operations", cascade={"persist"}) */ private $users; public function __construct() { $this->users = new \Doctrine\Common\Collections\ArrayCollection(); } /** * Add users * * * @param Asset\UserBundle\Entity\User $users */ public function addUser(\Asset\UserBundle\Entity\User $user) { $this->users[] = $user; $users->addOperation($this); return $this; } /** * Remove users * * @param Asset\UserBundle\Entity\User $users */ public function removeUser(\Asset\UserBundle\Entity\User $user) { $this->users->removeElement($user); $users->removeOperation($this); } /** * Get users * * @return Doctrine\Common\Collections\Collection */ public function getUsers() // Notez le « s », on récupère une liste de catégories ici ! { return $this->users; } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set nom * * @param string $nom * @return Operation */ public function setNom($nom) { $this->nom = $nom; return $this; } /** * Get nom * * @return string */ public function getNom() { return $this->nom; } /** * Set description * * @param string $description * @return Operation */ public function setDescription($description) { $this->description = $description; return $this; } /** * Get description * * @return string */ public function getDescription() { return $this->description; } /** * @param Asset\ReportManagerBundle\Entity\Image $image * @return Operation */ public function setImage(\Asset\ReportManagerBundle\Entity\Image $image = null) { $this->image = $image; return $this; } /** * @return Asset\ReportManagerBundle\Entity\Image */ public function getImage() { return $this->image; } }
Ps: Je n'ai pas mis le sujet dans Doctrine2 car je ne sais pas si le problème vient de Doctrine2 ou de Symfony2 par exemple d'une mauvaise utilisation du FOSUserBundle.
Partager