4

我已经安装了 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: 在 /path/to/frameworks/Symfony2/app 找不到“GET /”(未捕获的异常)的路由/cache/prod/classes.php 第 4584 行 [] []

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

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

令人难以置信的是,它表明没有为这个环境定义路由(我不相信错误消息——它本质上说的是同一件事)。

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

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

[[更新]]

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
4

3 回答 3

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 演示包 _welcome 路由的 / 路由。这就是为什么它适用于 dev 版本而不适用于 prod 版本的原因!

解决方案:

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

_welcome:

pattern:  /

defaults: { _controller: YourbundlenameMainBundle:Default:index }

如果您的欢迎页面不是索引,您可以将索引更改为其他路线

于 2012-11-12T15:17:35.133 回答
1

在您确保在任何 routing.yml 中定义了您的 / 路由之后

_welcome:
pattern:  /
defaults: { _controller: YourbundlenameMainBundle:Default:index }

清除您的产品环境缓存!

app/console cache:clear --env=prod
于 2013-09-15T22:29:59.273 回答
1

我有同样的问题。这是由于 AppKernel.php 中缺少 bundel 造成的。

有点晚了,但您可以尝试在 web/app.php 中更改这一行:

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

至:

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

这将启用调试,您应该能够找到您的问题。修复后,您将不得不将其改回 false ;)。

希望这可以帮助。

于 2012-10-12T21:55:42.460 回答