Bonjour,
J'ai 2 entités :
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<?xml version="1.0" encoding="UTF-8"?> <!-- src/Common/UserBundle/Resources/config/doctrine/MUser.orm.xml --> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-maping.xsd"> <entity repository-class="Common\UserBundle\Repository\MUserRepository" name="Common\UserBundle\Entity\MUser" table="fos_user"> <id name="id" type="integer" column="id"> <generator strategy="AUTO"/> </id> <field name="lastname" type="string" length="255" /> <many-to-many field="mgroups" inversed-by="musers" target-entity="Common\UserBundle\Entity\MGroup"> <join-table name="fos_user_user_group"> <join-columns> <join-column name="user_id" referenced-column-name="id" /> </join-columns> <inverse-join-columns> <join-column name="group_id" referenced-column-name="id" /> </inverse-join-columns> </join-table> </many-to-many> </entity> </doctrine-mapping>
Le doctrine:generate:entities m'a bien généré les deux fichiers entités et chacun possède bien les 3 fonctions qui permettent de jouer avec cette relation.
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<?xml version="1.0" encoding="UTF-8"?> <!-- src/Common/UserBundle/Resources/config/doctrine/MGroup.orm.xml --> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-maping.xsd"> <entity repository-class="Common\UserBundle\Repository\MGroupRepository" name="Common\UserBundle\Entity\MGroup" table="fos_group"> <id name="id" type="integer" column="id"> <generator strategy="AUTO"/> </id> <many-to-many field="musers" mapped-by="mgroups" target-entity="Common\UserBundle\Entity\MUser"> <join-table name="fos_user_user_group" /> </many-to-many> </entity> </doctrine-mapping>
J'ai un contrôleur et une vue dédiés à la gestion des utilisateurs et j'ai également un contrôleur et une vue dédiés à la gestion des groupes.
Lorsque je veux afficher la liste des MUsers d'un MGroup, pas de problème, je vois tout le monde.
Lorsque je veux afficher la liste des MGroups d'un MUser, pas de problème, je vois tous les groupes.
Lorsque je veux mettre à jour via un formulaire la liste des MGroups d'un MUser, pas de problème, elle se met à jour.
Lorsque je veux mettre à jour via un formulaire la liste des Musers d'un MGroup, rien ne se passe par contre, les autres champs du formulaire sont bien mis à jour en base de données.
J'imagine que j'ai oublié quelque chose dans mes fichiers xml mais je n'arrive pas à voir quoi.
J'ai vu plusieurs sites qui indiquaient que la relation ne devait être faite que sur un seul fichier et pourtant, tant que je n'avais mis <many-to-many field="musers" mapped-by="mgroups" target-entity="Common\UserBundle\Entity\MUser" />, doctrine:generate:entities ne créait pas les 3 fonctions dans l'entité MGroup et je ne pouvais pas lire les données.
Ci-dessous, pour info, les 2 formulaires :
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 <?php // src/Common/UserBundle/Form/Type/MUserType.php namespace Common\UserBundle\Form\Type; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; class MUserType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('lastname', 'text') ->add('mgroups', 'entity', array( 'class' => 'Common\UserBundle\Entity\MGroup', 'choice_label' => 'name', 'multiple' => true, 'expanded' => true)) ->add('save', 'submit'); } public function getName() { return 'muser'; } }Les contrôleurs sont presque identiques. J'ai pratiquement fait un chercher/remplacer pour changer MUser (qui enregistre bien) par MGroup (qui n'enregistre pas).
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 <?php // src/Common/UserBundle/Form/Type/MGroupType.php namespace Common\UserBundle\Form\Type; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; class MGroupType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('name', 'text') ->add('musers', 'entity', array( 'class' => 'Common\UserBundle\Entity\MUser', 'choice_label' => 'username', 'multiple' => true, 'expanded' => true)) ->add('save', 'submit'); } public function getName() { return 'mgroup'; } }
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 <?php // src/Common/UserBundle/Controller/GroupController.php namespace Common\UserBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Request; class MGroupController extends Controller { public function editAction($groupid, Request $request) { $group = $this->get('common.mgroup_manager')->getRepository()->findById($groupid); $form = $this->createForm('mgroup', $group[0]); $form->handleRequest($request); if ($form->isValid()) { $this->get('common.mgroup_manager')->saveMGroup($group[0]); return $this->redirectToRoute('common_user_mgroup_show', array('groupid' => $group[0]->getId())); } return $this->render('CommonUserBundle:MGroup:edit.html.twig', array( 'group' => $group[0], 'form' => $form->createView() )); } }Merci d'avance pour l'aide que vous pourrez m'apporter car techniquement, l'application fonctionne bien puisque je n'ai absolument aucun message d'erreur ce qui ne facilite bien sûr pas le debug.
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 <?php // src/Common/UserBundle/Controller/MUserController.php namespace Common\UserBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Request; class MUserController extends Controller { public function editAction($userid, Request $request) { $user = $this->get('common.muser_manager')->getRepository()->findById($userid); $form = $this->createForm('muser', $user[0]); $form->handleRequest($request); if ($form->isValid()) { $this->get('common.muser_manager')->saveMUser($user[0]); return $this->redirectToRoute('common_user_muser_show', array('userid' => $user[0]->getId())); } return $this->render('CommonUserBundle:MUser:edit.html.twig', array( 'user' => $user[0], 'form' => $form->createView() )); } }
Partager