Symfony2: aucun itinéraire trouvé pour " GET / lucky / number"
Je commence le tutoriel (en tant que débutant) et tout fonctionne 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 Controller
, j'ai créé un fichier appelé /var/www/html/[projekt]/src/AppBundle/Controller/LuckyController.php
Mais quand j'ai ouvert http://[Serveur-IP]:8000/app_dev.php/chance/nombre est toujours une erreur 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
Contrôleur
namespace AppBundleController;
use SymfonyBundleFrameworkBundleControllerController;
use SensioBundleFrameworkExtraBundleConfigurationRoute;
use SymfonyComponentHttpFoundationResponse;
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 erreur...
erreur-Uncaught PHP Exception SymfonyComponentHttpKernelExceptionNotFoundHttpException: "aucun itinéraire trouvé 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 /
10 réponses
Je viens d'ajouter un
<?php
Dans le fichier "LuckyNumberController" et cela fonctionne.... vraiment étrange.
Merci à tous
Essayez cette URL:
Http://[Serveur-IP]:8000/app_dev.php/fr/chance/nombre
Il y a un bug dans le livre Symfony: ils ont oublié le support de l'application de démonstration i18n.
Ajoutez simplement le paramètre" /en " avant les paramètres de routage.
je sais que cette question est fermée, mais j'espère que ma réponse peut aider les autres qui sont toujours confrontés à ce problème.
Est Parfois un problème de cache. Essayez de supprimer dev dossier /projet/var/cache/dev.
Comme authentictech dit, vous pouvez également essayer la commande:
php bin/console cache:clear
Si vous voulez spécifier l'environnement, vous devez ajouter la propriété --env=prod.
Vous n'étendez pas la classe de contrôleur Symfony. Il devrait être Classe LuckyController extends 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 dans cette question n'était pas dans l'extension du contrôleur, alors ignorez ma réponse.
J'ai copié et collé votre contrôleur dans un projet Symfony existant et l'itinéraire est immédiatement apparu. Donc rien de mal avec le contrôleur.
J'ai également comparé le routage.yml et c'est la même chose.
La seule chose qui reste est de vérifier la structure des dossiers et assurez-vous que vous n'avez pas différents projets Symfony mélangés; peut-être que vous éditez le bon fichier mais 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 mettre votre projet dans /var/www/html (en fait, il vaut mieux ne pas le faire).
Http://localhost:8080/SymfonyProject/web/app_dev.php / chanceux / nombre
Ça marche pour moi. Modifiez "SymfonyProject" avec le dossier nom de votre projet ou supprimez-le si votre projet est pointé directement par le serveur. Faites également attention au port qui fonctionne pour vous (localhost: 8080). Dans mon cas est 8080, dans votre pourrait être 8000 ou autre chose.
Une autre raison pour laquelle vous pourriez obtenir un "No route found for" GET / luck / number " est parce que vous avez un onglet devant l'annotation @Route
. Je pensais que j'avais programmé mon code exactement comme l'exemple, et obtenais cette erreur, mais il s'est avéré que c'était l'onglet.
Voir le code suivant ci-dessous, et notez que le premier produit le "No Route found..."exception:
/**
* @Route("/lucky/number")
*/
/**
* @Route("/lucky/number")
*/
Au cas où quelqu'un d'autre rencontrerait ce problème: pour moi, le problème était double:
- j'ai oublié d'attribuer un espace de noms
namespace AppBundle\Controller;
- Je n'ai pas ajouté d'instruction use pour le modèle
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
A eu 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. Il semble y avoir un certain nombre de configurations qui pourraient résoudre ce problème, mais je ne suis pas assez familier avec Symfony pour connaître la cause exacte. Ma solution jusque-là est de simplement définir les paramètres régionaux dans L'URL, par exemple:
/ app_dev.php/en/chance/nombre
Étendre le contrôleur de classe de base n'a pas fonctionné pour moi. Pour résoudre le problème, j'ai dû faire le changement suivant dans web / app.php
$kernel = new AppKernel('prod', true);
J'ai aussi dû ajouter ' en ' dans l'url: http://scotchbox.Démo/FR / chanceux / nombre