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