Comment faire passer le paramètre d'une route dans une fonction

Ce sujet est résolu
152061
,

Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

J'ai le code suivant dans un controleur

    /**
     *Cette méthode affiche le contenu du cours de la formation
     * @return Response
     * @Route("cours/{id_formation}", name="cours")
     */
    public function cours($id, $module = 1)
    {
        $repoPartie = $this->getDoctrine()->getRepository(Partie::class);
        $parties = $repoPartie->findBy(['formation'=> $id, 'module' => $module]);

        if ($parties) {

            $repoChapitre = $this->getDoctrine->getRepository(Chapitre::class);
            $chapitres = $repoChapitre->findBy(['partie' => $parties->getId(), 'sousChapitre' => NULL]);

            return $this->render('formation/cours.html.twig', ['parties' => $parties, 'chapitres' => $chapitres]);
        }
       else {
           return $this->render('formation/redaction_encours.html.twig');
       }
    }

Comme vous pouvez le voir au niveau de la route, je fais passer un paramètre qui 'id_formation'

Comment faire comprend à symfony que la valeur de la variable $id passé en argument dans méthode cours() correspond à la valeur du paramètre id_formation passé dans la route.

Car j'ai l'erreur suivante :

Controller "App\Controller\FormationController::cours()" requires that you provide a value for the "$id" argument. Either the argument is nullable and no null value has been provided, no default value has been provided or because there is a non optional argument after this one.

Pour information la valeur de id_formation existe forcément et ne peux pas être null.

2 Réponse

87112
,

Hello,

Tu as un paramètre de route nommé "id_formation" et un paramètre d'entrée "id". Le composant Router peut gérer beaucoup de choses, mais ce n'est pas magique!
Soit tu passes un id de même nom, soit tu demandes au ParamConverter de traduire cet id en entité :

/**
     *Cette méthode affiche le contenu du cours de la formation
     * @return Response
     * @Route("cours/{id_formation}", name="cours")
     */
    public function cours(Partie $partie, $module = 1)
    {

    // ou

    /**
     *Cette méthode affiche le contenu du cours de la formation
     * @return Response
     * @Route("cours/{id}", name="cours")
     */
    public function cours($id, $module = 1)
    {
152061
,

Un grand merci. Il me semble de j'avais fait la même chose à un moment donné.

Mais à mon avis j'avais dû mal orthographié la variable.

Merci ça fonctionne