【发布时间】:2013-11-30 02:58:36
【问题描述】:
在 prod 环境中,当请求不存在的 URI(例如 .../green)时,我希望呈现自定义 404 错误页面。响应头是
Date: Sat, 16 Nov 2013 19:11:55 GMT
Server: Apache/2.4.4 (Win32) PHP/5.4.8
X-Powered-By: PHP/5.4.16
Content-Length: 2455
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
200 OK
响应是
Fatal error: Uncaught exception 'Symfony\Component\Routing\Exception\ResourceNotFoundException' in G:\Documents\workspace\sym\app\cache\prod\classes.php on line 1883 Symfony\Component\Routing\Exception\ResourceNotFoundException: in G:\Documents\workspace\sym\app\cache\prod\appProdUrlMatcher.php on line 1682 Call Stack: 0.0000 130880 1. {main}() G:\Documents\workspace\sym\web\app.php:0 0.0200 340984 2. Symfony\Component\HttpKernel\Kernel->handle() G:\Documents\workspace\sym\web\app.php:21 0.1800 2659792 3. Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel->handle() G:\Documents\workspace\sym\app\bootstrap.php.cache:2249 0.1800 2661000 4. Symfony\Component\HttpKernel\HttpKernel->handle() G:\Documents\workspace\sym\app\bootstrap.php.cache:2947 0.1800 2661032 5. Symfony\Component\HttpKernel\HttpKernel->handleRaw() G:\Documents\workspace\sym\app\bootstrap.php.cache:2818 0.1800 2661576 6. Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch() G:\Documents\workspace\sym\app\bootstrap.php.cache:2833 0.4900 4232624 7. Symfony\Component\EventDispatcher\EventDispatcher->dispatch() G:\Documents\workspace\sym\app\cache\prod\classes.php:1764 0.4900 4233384 8. Symfony\Component\EventDispatcher\EventDispatcher->doDispatch() G:\Documents\workspace\sym\app\cache\prod\classes.php:1600 0.4900 4234080 9. call_user_func() G:\Documents\workspace\sym\app\cache\prod\classes.php:1667 0.4900 4234096 10. Symfony\Component\HttpKernel\EventListener\RouterListener->onKernelRequest() G:\Documents\workspace\sym\app\cache\prod\classes.php:1667 0.4900 4234360 11. Symfony\Component\Routing\Router->match() G:\Documents\workspace\sym\app\cache\prod\classes.php:1872 0.4900 4238400 12. appProdUrlMatcher->match() G:\Documents\workspace\sym\app\cache\prod\classes.php:1207 Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /green" in G:\Documents\workspace\sym\app\cache\prod\classes.php on line 1883 Call Stack: 0.0000 130880 1. {main}() G:\Documents\workspace\sym\web\app.php:0 0.0200 340984 2. Symfony\Component\HttpKernel\Kernel->handle() G:\Documents\workspace\sym\web\app.php:21 0.1800 2659792 3. Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel->handle() G:\Documents\workspace\sym\app\bootstrap.php.cache:2249
我越是试图理解这一点,我就越感到困惑。文档说将呈现app\Resources\TwigBundle\views\Exception 中的简单error404.html.twig。 (是的,我已经清除了产品缓存 - 多次!产品日志中没有条目。)文档是否错误,我真的需要创建一个异常处理程序来显示这个 404 页面,因为响应是 200?
更新:
所以我猜开发环境中的 404 并不意味着产品中的 404。然后我尝试了一个简单的异常处理程序来获取自定义错误页面,但没有 Monolog 邮件。尝试将自定义处理程序与 Monolog 集成会导致以下结果,因为自定义处理程序使用 Twig。难怪我头晕目眩。
[Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException] Circular reference detected for service "router", path: "cache_warmer -> router -> monolog.logger.router -> mana.exception.controller -> templating -> twig -> templating.helper.logout_url".
【问题讨论】:
-
异常信息是什么?
-
@WouterJ:我已经编辑以显示上面的完整异常消息。这是回应。
-
好像是资源(文件)无法加载,而不是找不到路由。
-
@WouterJ:我想我把资源和未找到的路线混淆了。内部(我的代码)请求与外部(用户添加)URI 请求的区别是什么?