Symfony 4 : jeu Quizz problème récupérer les data du Fomulaire

Par Virginia, il y a 8 ans


Bonjour,
Me revoilà avec un autre problème dans notre projet de jeu de Quizz avec les Questions.
Nous en sommes à l'étape de construction de la partie "game", c'est à dire pourvoir faire une partie de jeu de notre Quizz. Dans chaque Quizz, il y a 10 Questions avec 4 choix de réponses.
L'idée est donc d'afficher à chaque fois la Question avec les 4 choix de réponses, l'utilisateur choisi et soumet le formulaire qui l'amène ensuite à la Question suivante.
Dans notre QuizzController nous avons donc pu récupérer le Quizz et les 10 Questions avec les différents choix de réponses :

/** * TODO replacer id par slug * a voir pour bloqué l * @Route("quizz_{id}/question_{nbr}", name="quizz_play") * */ public function play($id, Quizz $quizz, Request $request, $nbr, QuestionRepository $questionRepo) { $question = $questionRepo->findOneBy(['quizz'=>$id, 'nbr'=>$nbr]); $user = $this->getUser(); $responses = [ $question->getProp1() => 'reponse 1', $question->getProp2() => 'reponse 2', $question->getProp3() => 'reponse 3', $question->getProp4() => 'reponse 4' ]; //dump($responses); //shuffle($responses); //dump($responses); $form = $this->createFormBuilder() ->add('response', ChoiceType::class, [ 'label'=>$question->getBody(), 'choices'=> $responses, 'expanded' => true, 'multiple' => false, ]) ->getForm(); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $data = $form->getData(); $nbr++; if ($nbr <=10) { return $this->redirectToRoute('quizz_play', [ 'form' => $form->createView(), 'question' => $question, 'nbr' => $nbr, 'id' => $id, ]); } dump($data); } return $this->render('quizz/play.html.twig', [ 'form' => $form->createView(), 'question' => $question, ]); }

Et voici l'entité Question qui comporte les propositions de réponses :

<?php namespace App\Entity; use Webmozart\Assert\Assert; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass="App\Repository\QuestionRepository") */ class Question { /** * @ORM\Id() * @ORM\GeneratedValue() * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="string", length=255) */ private $body; /** * @ORM\Column(type="string", length=128) */ private $prop1; /** * @ORM\Column(type="string", length=128) */ private $prop2; /** * @ORM\Column(type="string", length=128) */ private $prop3; /** * @ORM\Column(type="string", length=128) */ private $prop4; /** * @ORM\Column(type="string", length=255, nullable=true) */ private $anecdote; /** * @ORM\Column(type="string", length=255, nullable=true) */ private $source; /** * @ORM\Column(type="boolean") */ private $errore; /** * @ORM\ManyToOne(targetEntity="App\Entity\Quizz", inversedBy="questions", cascade={"persist"}) * @ORM\JoinColumn(nullable=false) */ private $quizz; /** * @ORM\ManyToOne(targetEntity="App\Entity\Level", inversedBy="questions") * @ORM\JoinColumn(nullable=false) */ private $level; /** * @ORM\Column(type="integer") */ private $nbr; public function getId() : ? int { return $this->id; } public function getBody() : ? string { return $this->body; } public function setBody(string $body) : self { $this->body = $body; return $this; } public function getProp1() : ? string { return $this->prop1; } public function setProp1(string $prop1) : self { $this->prop1 = $prop1; return $this; } public function getProp2() : ? string { return $this->prop2; } public function setProp2(string $prop2) : self { $this->prop2 = $prop2; return $this; } public function getProp3() : ? string { return $this->prop3; } public function setProp3(string $prop3) : self { $this->prop3 = $prop3; return $this; } public function getProp4() : ? string { return $this->prop4; } public function setProp4(string $prop4) : self { $this->prop4 = $prop4; return $this; } public function getAnecdote() : ? string { return $this->anecdote; } public function setAnecdote(? string $anecdote) : self { $this->anecdote = $anecdote; return $this; } public function getSource() : ? string { return $this->source; } public function setSource(? string $source) : self { $this->source = $source; return $this; } public function getErrore() : ? bool { return $this->errore; } public function setErrore(bool $errore) : self { $this->errore = $errore; return $this; } public function getQuizz() : ? Quizz { return $this->quizz; } public function setQuizz(? Quizz $quizz) : self { $this->quizz = $quizz; return $this; } public function getLevel() : ? Level { return $this->level; } public function setLevel(? Level $level) : self { $this->level = $level; return $this; } public function getNbr(): ?int { return $this->nbr; } public function setNbr(int $nbr): self { $this->nbr = $nbr; return $this; } }

Nous avons bien l'affichage de nos 10 Questions, les uns à la suite des autres des qu'on clique sur le bouton submit.
Le problème est que dans le dump($data) du QuizzController, nous ne récupèrons bien entendu que la dernière réponse.
Nous avons tenté de définir au départ un tableau vide de résultats de cette manière :

$result = [ ];

Mais pas moyen du lui passer les réponses validées par la suite.
Avez-vous une idée ?

Aucune réponse