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 :

Création d'un qcm


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2015
    Messages : 17
    Points : 12
    Points
    12
    Par défaut Création d'un qcm
    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(),
        ]);
     
    }

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    bonjour,
    j'ai compris le contexte à partir du titre mais le contenu est ambigu , le code aussi.
    pourquoi ne pas créer une entité sujet avec OneToMany Cascade remove avec entité Question.
    Apres tu gére librement les sujets et lors de l'ajout d'une question tu l'affecte librement au sujet convenablement.
    ca sert à rien de recuperer l'id et je sais pas quoi.

    un QCM peut etre controler par une durée , une session je veux dire ..
    le submit du QCM peut etre automatique si le temps ecoulé

    Une entité Question peut etre lié OneToOne avec une entité Correction pour avoir un cumul de point correspondant au nombre de reponse egal au nombre de Correction par sujet ...


    Plein de chose à faire ..

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2015
    Messages : 17
    Points : 12
    Points
    12
    Par défaut ca sert à rien de recuperer l'id
    Bonjour MehrezLabidi,

    Merci pour ton retour, en effet, je ne suis pas allé jusqu'au bout de l'explication.

    L'idée est par la suite de créer les réponses corespondantes via un formulaire imbriqué.
    Du coup, j'ai besoin de connaitre l'id pour attacher mes réponses par la suite en base de données.

    => Un sujet contient 1 ou N question et 1 Question contien 1 ou N réponses.

    P.S Qu'entends tu par "réer une entité sujet avec OneToMany Cascade remove avec entité Question."?

    Merci d'avance,

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Points : 107
    Points
    107
    Par défaut
    Ce qu'il entend c'est que Symfony peut très bien s'occuper de lier chaque table entre elle, tu n'as pas à t'embeter à les lier toi même en ayant les ID en amont.

    Voir : http://symfony.com/doc/current/doctr...ociations.html

    Crée tous tes formulaires avec de nouvelles entités qui n'existent pas encore en base, paramètre-les pour se "sauvegarder" (persist) en cascade (Quand l'enfant est sauvegardé, le parent l'est automatiquement, etc ...) et tout devrait se faire automatiquement sans que tu ai à t'embeter.

Discussions similaires

  1. Création d'un QCM avec WinDev Mobile
    Par kanakryss dans le forum Windev Mobile
    Réponses: 13
    Dernier message: 06/10/2016, 17h55
  2. Création d'un qcm php
    Par mimi78 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 30/08/2012, 22h02
  3. création d'un QCM en orienté objet
    Par ireolax dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/04/2012, 00h36
  4. [PPT-07] Création d'un QCM interactif en PPT
    Par babass77 dans le forum VBA PowerPoint
    Réponses: 7
    Dernier message: 27/01/2009, 16h36

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