Partage
  • Partager sur Facebook
  • Partager sur Twitter

Impossible d'envoyer les données en post

No route found for "GET /mon-path": Method Not Allowed (Allow: POST)

Sujet résolu
    26 mars 2019 à 23:37:58

    Salut.

    Je rencontre un problème avec Symfony 4 depuis un moment et je cherche de l'aide.

    En effet j'ai une fonction dans mon controller que je veux accessible qu'en post. Mais à chaque tentative j'obtiens cette même erreur : No route found for "GET /mon-path": Method Not Allowed (Allow: POST) 

    Mon controller:

    use Symfony\Component\Routing\Annotation\Route;
    /**
         * @Route("/home-resultat", name="home_resultat", methods={"POST"})
         */
        public function home_resultat(Request $request, ObjectManager $manager){
            $current = 'espace-eleves';
            $annexe = $this->get('session')->get('annexe');
            $classe = $this->get('session')->get('classe');
            $annee  = $this->get('session')->get('annee');
             ...
    
        }

    J'ai suivi un tutoriel sur youtube où le formateur a eu le même problème. Et fort malheureusement, il n a pas eu la solution. Ce qui me fais penser que ça peut être un bug au niveau de SF4.

    Des pistes pourraiet beaucoup m'aider

    -
    Edité par youstra 26 mars 2019 à 23:38:20

    • Partager sur Facebook
    • Partager sur Twitter
      26 mars 2019 à 23:48:26

      Salut !

      Quel est le code qui te fait arriver sur cette route ?

      • Partager sur Facebook
      • Partager sur Twitter
        27 mars 2019 à 7:51:16

        J'ai mon template twig qui a unj formulaire en post et une action qui pointe vers cette route :

        <div class="container">
                    <h3>Saisissez votre matricule</h3>
                    <form action="{{ path('home_resultat') }}" method="post">
                      <div class="row">
                        <div class="col-md-6">
                          <input type="text" name="matricule" placeholder="Saisissez votre matricule ici">
                        </div>
                        <div class="row">
                          <div class="col-md-2">
                            <input type="submit" value="Envoyer" class="read-post">
                          </div>
                        </div>
                      </div>
                      <input type="hidden" value="{{ annexe }}" id="annexe">
                    </form>
              </div>

        N'hésitez pas à me cantacter pour d'amples informations ?

        • Partager sur Facebook
        • Partager sur Twitter
          27 mars 2019 à 8:14:40

          Peut-on voir l'entier de l'action ?

          • Partager sur Facebook
          • Partager sur Twitter
            27 mars 2019 à 8:44:16

            Pas de souci. Le voici

                /**
                 * @Route("/home-resultat", name="home_resultat", methods={"POST"})
                 */
                public function home_resultat(Request $request, ObjectManager $manager){
                    $current = 'espace-eleves';
                    $annexe = $this->get('session')->get('annexe');
                    $classe = $this->get('session')->get('classe');
                    $annee  = $this->get('session')->get('annee');
                    if($request->isMethod('post'))
                    {
                        $data   = $request->request->all();
                        // return new Response(var_dump($data['matricule']));
                        // On vérifie que le matricule saisi est bien enregistré et qu'il est bien de l'annexe choisi
                        $matricule = $data['matricule'];
            
                        switch ($annexe) {
                            case 'agboville':
                                $eleve = $manager->getRepository(EleveAgboville::class)->findOneBy(['matricule' => $matricule]);
                                // $requete_classes = 'SELECT * FROM eleve_agboville WHERE matricule = :matricule;';
                                break;
                            case 'bouafle':
                                $eleve = $manager->getRepository(EleveBouafle::class)->findOneBy(['matricule' => $matricule]);
                                // $requete_classes = 'SELECT * FROM eleve_bouafle WHERE matricule = :matricule;';
                                break;
                            case 'bouake':
                                $eleve = $manager->getRepository(EleveBouake::class)->findOneBy(['matricule' => $matricule]);
                                // $requete_classes = 'SELECT * FROM eleve_bouake WHERE matricule = :matricule;';
                                break;
                            case 'issia':
                                $eleve = $manager->getRepository(EleveIssia::class)->findOneBy(['matricule' => $matricule]);
                                // $requete_classes = 'SELECT * FROM eleve_issia WHERE matricule = :matricule;';
                                break;
                            case 'vavoua':
                                $eleve = $manager->getRepository(EleveVavoua::class)->findOneBy(['matricule' => $matricule]);
                                // $requete_classes = 'SELECT * FROM eleve_vavoua WHERE matricule = :matricule;';
                                break;
                            case 'zattry':
                                $eleve = $manager->getRepository(EleveZattry::class)->findOneBy(['matricule' => $matricule]);
                                // $requete_classes = 'SELECT * FROM eleve_zattry WHERE matricule = :matricule;';
                                break;
                            default:
                                $eleve = $manager->getRepository(EleveAbidjan::class)->findOneBy(['matricule' => $matricule]);
                                // $requete_classes = 'SELECT * FROM eleve_abidjan WHERE matricule = :matricule;';
                                break;
                        }
                        if(empty($eleve))
                        {
                            $this->addFlash('danger', 'Le matricule saisi n\'existe pas dans l\'annexe sélectionné.');
                            return $this->redirectToRoute("home_resultat");
                        }
                        return $this->render('result/home-resultat.html.twig', [
                            'current' => $current,
                            'annexe'  => $annexe
                        ]);
                    }
                }



            • Partager sur Facebook
            • Partager sur Twitter
              27 mars 2019 à 9:09:06

              Je m'en doutais un peu.

              S'il n'y a aucun résultat, tu rediriges vers la page. Or, la redirection se fait en GET par défaut — il y aurait moyen de la faire faire en POST avec un nouveau code de statut HTTP, mais tu aurais probablement une boucle de redirection si ton navigateur le comprenait.

              Je te conseillerais de rendre la page dans tous les cas, mais tu gères dans la vue l'affichage d'un message si tu n'as aucun résultat disponible.

              • Partager sur Facebook
              • Partager sur Twitter
                29 mars 2019 à 19:14:35

                Effectivement.

                J'ai analysé mon code et j'ai compris que le problème venait de la redirection que je fais quand il n'y a aucun résultat. Merci pour votre aide

                • Partager sur Facebook
                • Partager sur Twitter

                Impossible d'envoyer les données en post

                × 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