Symfony2:找不到“GET /lucky/number”的路由
Posted
技术标签:
【中文标题】Symfony2:找不到“GET /lucky/number”的路由【英文标题】:Symfony2: No route found for "GET /lucky/number" 【发布时间】:2015-11-02 08:23:39 【问题描述】:我开始学习教程(作为新手),一切正常,直到:
http://symfony.com/doc/current/book/page_creation.html#creating-a-page-route-and-controller 在步骤创建页面:路由和控制器
我创建了一个名为/var/www/html/[projekt]/src/AppBundle/Controller/LuckyController.php
的文件
但是当我打开http://[Server-IP]:8000/app_dev.php/lucky/number 时总是得到一个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: +
routing.yml
app:
resource: "@AppBundle/Controller/"
type: annotation
控制器
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>' );
不知道哪里错了……
错误 - 未捕获的 PHP 异常 Symfony\Component\HttpKernel\Exception\NotFoundHttpException:“在 /var/www/html/[Symfony-Folder]/app/ 处找不到“GET /lucky/number”的路由” cache/dev/classes.php 第 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 /
【问题讨论】:
请分享你的 routing.yml 和你的控制器 routing.yml (/app/config/routing.yml): `app: resource: "@AppBundle/Controller/" type: annotation ` 不要在 cmets 中发布您的文件。编辑您的帖子并添加您的代码。 @MarcelBurkhard 有没有办法找出它是否使用注释?抱歉,我是 Symfony 的新手。 添加到 LuckyController.php 【参考方案1】:你实际上并没有扩展 Symfony Controller 类。它应该是 class 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>');
编辑:毕竟,这个问题的问题不在于扩展控制器,所以忽略我的回答。
【讨论】:
我在 rc/AppBundle/Controller/LuckyController.php 文件中添加了“扩展控制器” - 但我仍然遇到同样的错误... 我明白了...尝试清除缓存,方法是在控制台中输入“php app/console cache:clear”命令,希望对您有所帮助。 已经尝试过这个非常基本的步骤可能会出现什么问题? symfony.com/doc/current/book/… - 按照说明操作 嗯,一切似乎都很好,您是否尝试过 'php app/console debug:router' 来查看您的应用程序中当前存在哪些路由? 您实际上不需要扩展框架的 Controller 类。【参考方案2】:我将你的控制器复制并粘贴到一个现有的 Symfony 项目中,然后路由立即出现。所以控制器没有问题。
我也对比了routing.yml,还是一样的。
剩下的唯一事情就是检查文件夹结构并确保没有将不同的 Symfony 项目混在一起;也许您正在编辑正确的文件,但从不同的路径启动 Web 服务器。
仔细检查或以完全不同的路径重建项目。由于您正在使用嵌入式 Web 服务器进行测试,因此您无需将项目放入 /var/www/html(实际上最好不要)。
【讨论】:
【参考方案3】:我刚刚添加了一个
<?php
到文件“LuckyNumberController”,它的工作原理......真的很奇怪。
谢谢大家
【讨论】:
嗯...这并不奇怪。如果文件中没有打开的 php 标记 - 文件中也没有 php code,也没有要找到和解析的注释。 我不得不承认这是 symfonys 部分的一个奇怪错误,这些标签不在示例中,我们不知道打开该文件的内容,所以我们不知道它们是否有必要...也许这也与 php 的配置方式有关...我不知道 这个问题在 symfony 的 github Missing php header in the first script src/AppBundle/Controller/LuckyController.php 中得到了解答。他们拒绝为新手添加提示,因为他们认为这是 php coder 的基本知识。我为此浪费了 2 小时。【参考方案4】:试试这个网址:
http://[Server-IP]:8000/app_dev.php/en/lucky/number
Symfony Book 中有一个错误:他们忘记了演示应用程序支持 i18n。
只需在路由之前添加“/en”参数即可。
我知道这个问题已经结束,但我希望我的回答可以帮助其他仍然面临这个问题的人。
【讨论】:
【参考方案5】:http://localhost:8080/SymfonyProject/web/app_dev.php/lucky/number
它对我有用。使用您的项目名称文件夹更改“SymfonyProject”,如果服务器直接指向您的项目,则将其删除。 还要注意适合您的端口(localhost:8080)。在我的情况下是 8080,在您的情况下可能是 8000 或其他。
【讨论】:
【参考方案6】:您可能会收到“没有为“GET /luck/number”找到路由的另一个原因是因为您在 @Route
注释前面有一个选项卡。我以为我编写的代码与示例完全一样,并且得到这个错误,但原来是标签。
请看下面的代码,注意第一个产生“No Route found...”异常:
/**
* @Route("/lucky/number")
*/
/**
* @Route("/lucky/number")
*/
【讨论】:
这个问题至少看起来已经解决了。【参考方案7】:有时是缓存问题。尝试从 /project/var/cache/dev 中删除 dev 文件夹。
正如authentictech所说,你也可以试试这个命令:
php bin/console cache:clear
如果要指定环境,则应添加 --env=prod 属性。
【讨论】:
这为我在控制台中使用php bin/console cache:clear
命令解决了同样的问题。
你说的没问题,因为该命令默认会删除 dev 环境。经您的许可,我修改了评论以添加命令作为可能的解决方案。谢谢!
清除缓存命令是必须知道的,但他们不会在启动文档中的任何地方发布它。注意:这仍然适用于 Symfony 4。【参考方案8】:
万一其他人遇到这个问题:对我来说问题是双重的:
-
我忘记分配命名空间
namespace AppBundle\Controller;
我没有为模板use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
添加使用声明
【讨论】:
【参考方案9】:有同样的问题,但与目前显示的完全不同的原因......
不知何故,我的演示没有定义默认语言环境。似乎有许多配置可以解决这个问题,但我对 Symfony 还不够熟悉,还不知道确切的原因。在那之前我的解决方案是简单地在 URL 中定义语言环境,例如:
/app_dev.php/zh/lucky/number
【讨论】:
【参考方案10】:扩展基类 Controller 对我不起作用。为了解决这个问题,我必须在 web/app.php 中进行以下更改
$kernel = new AppKernel('prod', true);
我还必须在网址中添加“en”: http://scotchbox.demo/en/lucky/number
【讨论】:
【参考方案11】:如果您在 Symfony 4 中使用 apache 服务器(不是 Symfony 服务器),只需添加:
composer 需要 symfony/apache-pack
不要忘记将您的文档根目录寻址到
在哪里/是/你的/symfony/public
在 apache 配置中。
【讨论】:
以上是关于Symfony2:找不到“GET /lucky/number”的路由的主要内容,如果未能解决你的问题,请参考以下文章