Bonjour,

j'essaie de mettre en place une relation Many-To-Many entre deux entités : Catégorie / Service
J'ai donc deux formulaires pour la création des catégories et des services.


Mon soucis est sur le formulaire des services. Le service est bien créé en base mais n'est pas rattaché aux catégories que j'ai sélectionné ... Par contre aucun soucis lors de la création des catégories.


Un peu de code :

Entité Categorie.php
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
 
/**
 * Categorie
 *
 * @ORM\Table(name="categorie")
 * @ORM\Entity(repositoryClass="GestionBundle\Repository\CategorieRepository")
 */
class Categorie
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
 
    /**
     * @ORM\ManyToMany(targetEntity="Service", inversedBy="categories")
     */
    private $services;
 
    /**
     * Categorie constructor.
     */
    public function __construct()
    {
        $this->services = new ArrayCollection();
    }
 
	[...]
}
Entité Service.php
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
 
/**
 * Service
 *
 * @ORM\Table(name="service")
 * @ORM\Entity(repositoryClass="GestionBundle\Repository\ServiceRepository")
 */
class Service
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
 
    /**
     * @ORM\ManyToMany(targetEntity="Categorie", mappedBy="services")
     */
    private $categories;
 
    /**
     * @var string
     *
     * @ORM\Column(name="nom", type="string", length=255, unique=true)
     */
    private $nom;
 
    /**
     * Categorie constructor.
     */
    public function __construct()
    {
        $this->categories = new ArrayCollection();
    }
 
	[...]
}
Formulaire CategorieType.php
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
class CategorieType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nom')
            ->add('services', EntityType::class, array(
                'class'        => 'GestionBundle:Service',
                'choice_label' => 'nom',
                'multiple'     => true,
                'required'     => false))
            ->add('Ajouter', SubmitType::class)
        ;
    }
 
    [...]
}
Formulaire ServiceType.php
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
class ServiceType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nom')
            ->add('categories', EntityType::class, array(
                'class'        => 'GestionBundle:Categorie',
                'choice_label' => 'nom',
                'multiple'     => true,
                'required'     => false))
            ->add('Ajouter', SubmitType::class)
        ;
    }
 
    [...]
}
Action création des catégories :
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
    /**
     * @Route("/Categories/Creation", name="route_gestion_eltcoord_categories_creation")
     * @Template()
     */
    public function CreationCategorieAction(Request $request)
    {
        $Categorie = new Categorie();
 
        // Création du formulaire
        $form = $this->createForm(CategorieType::class, $Categorie);
        $form->handleRequest($request);
 
        if ($form->isSubmitted() && $form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($Categorie);
            $em->flush();
            return $this->redirectToRoute('route_gestion_eltcoord_categories');
        }
 
        // On retourne le formulaire à la vue
        return array('form' => $form->createView());
    }
Action création des services :
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
    /**
     * @Route("/Services/Creation", name="route_gestion_eltcoord_services_creation")
     * @Template()
     */
    public function CreationServiceAction(Request $request)
    {
        $Service = new Service();
 
        // Création du formulaire
        $form = $this->createForm(ServiceType::class, $Service);
        $form->handleRequest($request);
 
        if ($form->isSubmitted() && $form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($Service);
            $em->flush();
            return $this->redirectToRoute('route_gestion_eltcoord_services');
        }
 
        // On retourne le formulaire à la vue
        return array('form' => $form->createView());
    }

Merci.