Bonjour à toutes et à tous,

Je viens de développer tant bien que mal un contrôleur qui consiste à créer un sujet avec la possibilité d'ajouter une ou plusieurs questions.
Ca marche, mais je ne suis pas vraiment satisfait de la qualité de mon code:

En effet lorsque je veux créer un nouveau sujet, je n'arrive pas à récupérer le dernier id de ma table QUESTION dans phpmyadmin. (J'ai pour le moment deux tables: SUJET, QUESTION)


La SEULE solution que j'ai trouvé, et elle est très moche je vous le concède, c'est de créer le sujet, et créer un enregistrement dans ma table QUESTION pour finalement récupérer le dernier id via getid() par autoincrementation et supprimer ce même enregistrement factice avant l'affichage du formulaire pour l'ajout de la vrai question cette fois-ci.

Est-ce que l'un d'entre vous à une solution plus sexy?

Merci d'avance pour votre retour,

David

Voici le code:

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
 
/**
 * @Route("/add_sujet", name="add_sujet")
 * @Method({"GET", "POST"})
 */
public function add_sujetAction(Request $request)
{
 
    $sujet = new Sujet();
 
    $form = $this->createForm(SujetType::class, $sujet)
        ->add('saveAndNext', SubmitType::class);
    $form->handleRequest($request);
 
 
    if ($form->isSubmitted() && $form->isValid()) {
        $sujet->setSlug($this->get('slugger')->slugify($sujet->getTitle()));
        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->persist($sujet);
        $entityManager->flush();
 
        $this->addFlash('success', 'sujet.created_successfully');
 
        if ($form->get('saveAndNext')->isClicked()) {
            // On commence à créer les questions.
 
            $question = new question();
            $question->setContent('init');
            $question->setType('init');
            $question->setSujet($sujet);
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($question);
            $entityManager->flush(); // LES 7 PRECEDENTES LIGNES ME PERMETTENT JUSTE DE RECUPERER LE DERNIER ID UTILISE DE MA TABLE QUESTION<br>
            $id = $question->getId()+1; // TRES MOCHE.. <br>
            $entityManager->remove($question); // TRES MOCHE.. <br>
            $entityManager->flush(); // TRES MOCHE.. <br>
 
            return $this->redirectToRoute('add_question', ['sujetSlug' => $sujet->getSlug(), 'id' => $id]);
 
        }
        // On annule la création de sujet.
        return $this->redirectToRoute('sujet');
    }
    // On présente le formulaire pour déclaration sujet.
    return $this->render('default/add_sujet.html.twig', [
        'sujet' => $sujet,
        'form' => $form->createView(),
    ]);
 
}