web-dev-qa-db-fra.com

Symfony2: Aucune route trouvée pour "GET/lucky/number"

Je commence le tutoriel (en tant que débutant) et tout va bien jusqu'à: 

http://symfony.com/doc/current/book/page_creation.html#creating-a-page-route-and-controller à l'étape Création d'une page: Route et contrôleur

J'ai créé un fichier appelé /var/www/html/[projekt]/src/AppBundle/Controller/LuckyController.php

mais lorsque j'ouvre http: // [IP du serveur]: 8000/app_dev.php/lucky/number }, vous obtenez toujours un 404:

No route found for "GET /lucky/number"
404 Not Found - NotFoundHttpException
1 linked Exception: ResourceNotFoundException »

[2/2] NotFoundHttpException: No route found for "GET /lucky/number"   +
[1/2] ResourceNotFoundException:    +

routage.yml

app: 
    resource: "@AppBundle/Controller/" 
    type: annotation

Manette 

namespace AppBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;

class LuckyController 
{ 

    /**
     * @Route("/lucky/number") 
     */
    public function numberAction() 
    { 
        $number = Rand(0, 100);
        return new Response( '<html><body>Lucky number: '.$number.'</body></html>' ); 
    }
}

Aucune idée où est l'erreur.

ERROR - Uncaught PHP exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "Aucune route trouvée pour" GET/lucky/number "" dans/var/www/html/[Symfony-Folder]/app/cache/dev/classes.php ligne 2061 

php app/console debug:route
 [router] Current routes
 Name                     Method Scheme Host Path
 _wdt                     ANY    ANY    ANY  /_wdt/{token}
 _profiler_home           ANY    ANY    ANY  /_profiler/
 _profiler_search         ANY    ANY    ANY  /_profiler/search
 _profiler_search_bar     ANY    ANY    ANY  /_profiler/search_bar
 _profiler_purge          ANY    ANY    ANY  /_profiler/purge
 _profiler_info           ANY    ANY    ANY  /_profiler/info/{about}
 _profiler_phpinfo        ANY    ANY    ANY  /_profiler/phpinfo
 _profiler_search_results ANY    ANY    ANY  /_profiler/{token}/search/results
 _profiler                ANY    ANY    ANY  /_profiler/{token}
 _profiler_router         ANY    ANY    ANY  /_profiler/{token}/router
 _profiler_exception      ANY    ANY    ANY  /_profiler/{token}/exception
 _profiler_exception_css  ANY    ANY    ANY  /_profiler/{token}/exception.css
 _configurator_home       ANY    ANY    ANY  /_configurator/
 _configurator_step       ANY    ANY    ANY  /_configurator/step/{index}
 _configurator_final      ANY    ANY    ANY  /_configurator/final
 _twig_error_test         ANY    ANY    ANY  /_error/{code}.{_format}
 homepage                 ANY    ANY    ANY  /
21
Atreides78

Je viens d'ajouter un 

<?php

dans le fichier "LuckyNumberController" et cela fonctionne ... vraiment étrange.

Merci à tous

22
Atreides78

Essayez cette URL:

http: // [IP du serveur]: 8000/app_dev.php/fr/lucky/number

Il y a un bug dans le Symfony Book: ils ont oublié le support de l'application de démonstration i18n.

Ajoutez simplement le paramètre "/ en" avant ceux de routage.


Je sais que cette question est close mais j'espère que ma réponse pourra aider les autres qui sont toujours confrontés à ce problème.

5
pliski

C'est parfois un problème de cache. Essayez de supprimer le dossier dev de/project/var/cache/dev.

Comme authentictech dit, vous pouvez aussi essayer la commande:

php bin/console cache:clear

Si vous souhaitez spécifier l'environnement, vous devez ajouter la propriété --env = prod.

3
Apuig

En fait, vous n’étendez pas la classe du contrôleur Symfony. Il devrait être la classe LuckyController étend Controller

// src/AppBundle/Controller/LuckyController.php 
namespace AppBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Component\HttpFoundation\Response;

class LuckyController extends Controller {

     /** 
      * @Route("/lucky/number") 
      */ 
     public function numberAction() { 
         $number = Rand(0, 100); 
         return new Response('<html><body>Lucky number: '.$number.'</body></html>');
     }

}

EDIT: après tout, le problème de cette question n'était pas l'extension du contrôleur, alors ignorez ma réponse.

1
Dan Mironis

Si quelqu'un d'autre se heurte à ce problème, le problème était double pour moi:

  1. j'ai oublié d'attribuer un espace de noms namespace AppBundle\Controller;
  2. je n'ai pas ajouté d'instruction d'utilisation pour le modèle use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
0
Koen Cornelis

Une autre raison pour laquelle vous pouvez obtenir un "Aucun itinéraire trouvé pour" GET/chance/numéro "est parce que vous avez un onglet devant l'annotation @Route. dehors c'était la note.

Reportez-vous au code ci-dessous et remarquez que le premier produit l'exception "Aucun itinéraire trouvé ...":

/**
 *  @Route("/lucky/number")
 */

 /**
 * @Route("/lucky/number")
 */
0
Alvin Bunk

http: // localhost: 8080/SymfonyProject /web/app_dev.php/lucky/number

Ça marche pour moi. Changez "SymfonyProject" avec votre dossier de nom de projet ou supprimez-le si votre projet est dirigé directement par le serveur . Faites également attention au port qui vous convient (localhost: 8080). Dans mon cas, c'est 8080, dans votre pourrait être 8000 ou quelque chose d'autre.

0
Marco

L'extension du contrôleur de classe de base ne fonctionnait pas pour moi. Pour résoudre le problème, je devais faire le changement suivant dans web/app.php

$kernel = new AppKernel('prod', true);

Aussi, je devais ajouter 'en' dans l'URL: http: //scotchbox.demo/en/lucky/number

0
Krishna

J'ai copié et collé votre contrôleur dans un projet Symfony existant et la route est immédiatement apparue. Donc, rien de mal avec le contrôleur.

J'ai également comparé le routing.yml et c'est la même chose.

La seule chose qui reste à faire est de vérifier la structure des dossiers et de vous assurer de ne pas mélanger différents projets Symfony; Peut-être que vous éditez le bon fichier mais que vous démarrez le serveur Web à partir d'un chemin différent.

Vérifiez attentivement ou reconstruisez le projet dans un chemin complètement différent. Puisque vous testez avec le serveur Web intégré, vous n'avez pas besoin de placer votre projet dans/var/www/html (en fait, il est préférable de ne pas le faire).

0
Francesco Abeni

Avait le même problème, mais pour une raison complètement différente de celles montrées ici jusqu'à présent ...

D'une manière ou d'une autre, ma démo ne définissait pas de paramètres régionaux par défaut. Un certain nombre de configurations semblent pouvoir résoudre ce problème, mais Symfony n’est pas encore suffisamment familiarisé avec Symfony pour en connaître la cause exacte. Ma solution jusque-là consiste simplement à définir les paramètres régionaux dans l'URL, par exemple:

/app_dev.php/ fr / chanceux/nombre

0
Synexis