Partage
  • Partager sur Facebook
  • Partager sur Twitter

Symfony, problème de route

    21 mai 2018 à 21:37:50

    Ma route ne donne pas ça valeur par défaut, ça me déclenche toujours l'erreur 404 configurer en cas d'id non existante

        path:    /adverts/{id}
        defaults:
          _controller:  PIPlatformBundle:Adverts:viewId
          id:           1
        requirements:
          id:   \d*

    Côté contrôleur:

        public function viewIdAction($id)
        {
          $em = $this->getDoctrine()->getManager();
    
          $ar = $em->getRepository('PIPlatformBundle:Adverts');
          $advert = $ar->find($id);
    
          if($advert === null) {
            throw new NotFoundHttpException("l'annonce id :".$id.". N'existe pas :/");
          }
    
          return $this->render('PIPlatformBundle:Adverts:viewId.html.twig', array('advert' => $advert));
        }

    Merci de votre aide 

    -
    Edité par Traffy 21 mai 2018 à 21:44:07

    • Partager sur Facebook
    • Partager sur Twitter
      22 mai 2018 à 9:04:19

      Salut,

      Si tu fais un php console debug:route dans la console ça donne quoi? Ta route apparaît bien ? 

      De plus, la déclaration d'une route en yaml se fait comme ça (bizzare le _ devant controller ...)

      blog_show:
          path:     /blog/{slug}
          controller: App\Controller\BlogController::show



      • Partager sur Facebook
      • Partager sur Twitter
        22 mai 2018 à 9:45:52

        Salut !

        Attention, avec une valeur par défaut, il faut quand même que le slash avant l'ID soit donné. L'URL http://localhost/adverts/ n'est pas le même que http://localhost/adverts. Dans le cas où tu saisirais l'adresse à la main avant de recevoir le message d'erreur, vérifie ce point.

        • Partager sur Facebook
        • Partager sur Twitter
          22 mai 2018 à 11:12:39

          HekoHello a écrit:

          Salut,

          Si tu fais un php console debug:route dans la console ça donne quoi? Ta route apparaît bien ? 

          De plus, la déclaration d'une route en yaml se fait comme ça (bizzare le _ devant controller ...)

          blog_show:
              path:     /blog/{slug}
              controller: App\Controller\BlogController::show

          Salut,

          Merci de ta réponse. J'ai fait un php bin/console debug:route et oui ma route est bien présente avec son argument dedans.
          Pour le controller, je prend exemple sur le cours directement https://openclassrooms.com/courses/developpez-votre-site-web-avec-le-framework-symfony/le-routeur-de-symfony#/id/r-3620858

          Ymox a écrit:

          Salut !

          Attention, avec une valeur par défaut, il faut quand même que le slash avant l'ID soit donné. L'URL http://localhost/adverts/ n'est pas le même que http://localhost/adverts. Dans le cas où tu saisirais l'adresse à la main avant de recevoir le message d'erreur, vérifie ce point.


          Salut,

          Merci de ta réponse. J'ai fait attention à ça car ma route "adverts/{id}" mène à une action différente de "adverts".


          • Partager sur Facebook
          • Partager sur Twitter
            22 mai 2018 à 11:15:02

            Le problème du cours c'est qu'il est fort probable que tu es pas la même version de symfony ... Entre la version 3.xx et 4.xx y a un différence dans la gestion des routes. 

            Tu travailles sur quel version de Symfony ? 

            Voici la doc de symfony 4 : https://symfony.com/doc/current/routing.html

            • Partager sur Facebook
            • Partager sur Twitter
              22 mai 2018 à 11:18:28

              Je suis en symfony 3.3.2, merci je n'ai même pas regarder la doc je vais en profité pour le faire !

              Pas de grosse différence dans la doc :/, toujours le même problème

              -
              Edité par Traffy 22 mai 2018 à 11:23:06

              • Partager sur Facebook
              • Partager sur Twitter
                22 mai 2018 à 11:30:48

                Regarde dans les logs symfony il devrait y a voir un message d'erreur :)
                • Partager sur Facebook
                • Partager sur Twitter
                  22 mai 2018 à 11:31:38

                  Quand tu cherches à générer un URL avec path dans un template pour ta route qui pose problème , est-ce que ça te force à fournir un paramètre pour l'ID ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 mai 2018 à 11:47:52

                    HekoHello a écrit:

                    Regarde dans les logs symfony il devrait y a voir un message d'erreur :)


                    Je ne sais pas comment on voit les logs :/, tu peux m'expliquer où on les trouves stp ? à moins que tu parles du profiler ? Si c'est le cas ça me sort ça:

                      "route" => "pi_platform_viewId"
                      "route_parameters" => [▼
                        "_controller" => "PI\PlatformBundle\Controller\AdvertsController::viewIdAction"
                        "id" => ""
                        "_route" => "pi_platform_viewId"
                      ]
                      "request_uri" => "http://localhost/symfony/web/app_dev.php/adverts/"
                      "method" => "GET"



                    Ymox a écrit:

                    Quand tu cherches à générer un URL avec path dans un template pour ta route qui pose problème , est-ce que ça te force à fournir un paramètre pour l'ID ?

                    J'arrive à généré une url sans avoir besoin de renseigner le paramètre id

                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 mai 2018 à 11:59:44

                      [2018-05-22 09:58:03] request.INFO: Matched route "pi_platform_viewId". {"route":"pi_platform_viewId","route_parameters":{"_controller":"PI\\PlatformBundle\\Controller\\AdvertsController::viewIdAction","id":"","_route":"pi_platform_viewId"},"request_uri":"http://localhost/symfony/web/app_dev.php/adverts/","method":"GET"} []
                      [2018-05-22 09:58:03] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
                      [2018-05-22 09:58:03] doctrine.DEBUG: SELECT t0.id AS id_1, t0.title AS title_2, t0.date AS date_3, t0.author AS author_4, t0.content AS content_5, t0.published AS published_6, t0.image_id AS image_id_7 FROM adverts t0 WHERE t0.id = ? [""] []
                      [2018-05-22 09:58:03] doctrine.DEBUG: SELECT t0.id AS id_1, t0.author AS author_2, t0.date AS date_3, t0.content AS content_4, t0.advert_id AS advert_id_5 FROM comments t0 WHERE t0.advert_id IS NULL [] []
                      [2018-05-22 09:58:03] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "l'annonce id :. N'existe pas :/" at C:\wamp64\www\symfony\src\PI\PlatformBundle\Controller\AdvertsController.php line 50 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): l'annonce id :. N'existe pas :/ at C:\\wamp64\\www\\symfony\\src\\PI\\PlatformBundle\\Controller\\AdvertsController.php:50)"} []
                      [2018-05-22 09:58:03] request.INFO: Matched route "_wdt". {"route":"_wdt","route_parameters":{"_controller":"web_profiler.controller.profiler:toolbarAction","token":"dded66","_route":"_wdt"},"request_uri":"http://localhost/symfony/web/app_dev.php/_wdt/dded66","method":"GET"} []
                      Pour les logs, les voilà. Merci de m'avoir dit ou les trouver :)

                      -
                      Edité par Traffy 22 mai 2018 à 11:59:54

                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 mai 2018 à 12:03:58

                        Routes with optional parameters at the end will not match on requests with a trailing slash (i.e. `/blog/` will not match, `/blog` will match).

                        Symfony— How to Define Optional Placeholders

                        Au temps pour moi, j'avais dit le contraire

                        -
                        Edité par Ymox 22 mai 2018 à 12:04:24

                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 mai 2018 à 15:11:46

                          J'ai contourné le problème avec un 

                          if(empty($id)) {
                               $advert = $ar->find(1);
                          }
                          Comme ça si j'appelle la route /advert/ ça affiche l'annonce 1 et si j'appelle /advert/134 (inexistante) ça m'affiche bien une erreur
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Symfony, problème de route

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown