request.ERROR:Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException:找不到“GET /”的路由

时间:2012-08-13 10:45:03

标签: php symfony

我已经安装了Symfony2,修复了文件权限后,我可以通过指向以下方式从我的浏览器访问开发环境:

http://localhost/app_dev.php

但是,当我尝试通过将浏览器指向http://localhost来访问生产环境时,我得到以下异常(来自app / logs / prod.log):

  

[2012-08-13 11:30:03] request.ERROR:   Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException:无路由   在“GET /”(未被发现的感受)中找到   /path/to/frameworks/Symfony2/app/cache/prod/classes.php line 4584 []   []

然后,我从命令行检查了prod环境的可用路由。这是调查的结果。

  

root @ yourbox:〜/ path / to / frameworks / Symfony2 $ php app / console   router:debug -e = prod [router]当前路由名称方法模式

令人难以置信的是,它显示没有为此环境定义的路由(我不相信错误消息 - 基本上说同样的事情)。

所以,我的结论是这样的:开箱即用的Symfony2安装,生产环境没有默认路由 - 这是真的,还是我在某个地方犯了错误?

更重要的是,我该如何解决这个问题?在SF1.x中,直接从dev切换到prod,反之亦然。如何在prod环境中查看AcmeDemo应用程序。 ?

[[UPDATE]]

thecatontheflat 的反馈之后,我在routing.yml文件中添加了一条简单的测试路径。 app / config / routing.yml的内容现在是:

_welcome2:
    pattern:  /test
    defaults: { _controller: AcmeDemoBundle:Welcome:index }

当我在浏览器中尝试http://localhost/test时,我得到了相同的404错误。当我调试控制台上可用的路由时,我得到以下输出:

root@yourbox:~/path/to/frameworks/Symfony2$ php app/console router:debug -e=prod
[router] Current routes
Name      Method Pattern
_welcome2 ANY    /test

3 个答案:

答案 0 :(得分:4)

我有完全相同的问题!!

Symfony2有两个通用路由文件:

app/config/routing.yml and app/config/routing_dev.yml

但是,它还在每个捆绑包中都有一个特定于捆绑的路由文件。标准过程是在bundle routing.yml文件中定义所有bundle路由,然后通过添加以下内容从主routing.yml文件中引用它:

YourbundlenameMainBundle:

resource: "@YourbundlenameMainBundle/Resources/config/routing.yml"

prefix:   /

这就是我所拥有的,我仍然得到错误。但后来我更仔细地阅读了错误...没有找到GET / ....的路由然后我检查了我的routing_dev.yml文件,当然它有一条路径用于/来自Acme demo bundle _welcome路由。这就是为什么它适用于dev版本而不是prod版本!

解决方案:

通过添加以下内容,为/您的routing.yml全局文件或routing.yml包文件添加路由:

_welcome:

pattern:  /

defaults: { _controller: YourbundlenameMainBundle:Default:index }

如果欢迎页面不是索引

,您可以将索引更改为其他路径

答案 1 :(得分:1)

我遇到了完全相同的问题。它是由于AppKernel.php中缺少bundel引起的。

有点晚了但你可能会尝试在web / app.php中更改这一行: $ kernel = new AppKernel('prod',false); 至: $ kernel = new AppKernel('prod',true);

这将启用调试,您应该能够找到您的问题。修复后你需要将它改回假;)。

希望这有帮助。

答案 2 :(得分:1)

确保在任何routing.yml

中定义了/ route
_welcome:
pattern:  /
defaults: { _controller: YourbundlenameMainBundle:Default:index }

清除您的prod环境缓存!

app/console cache:clear --env=prod