Symfony 2.5:ResourceNotFound上的自定义404错误页面

时间:2016-10-20 15:57:00

标签: php symfony exception-handling http-status-code-404 symfony-2.5

我希望在没有找到路由并且抛出NotFoundHttpException时,实现在Symfony环境中显示自定义404错误页面的逻辑。

我已逐行跟踪cookbook解决方案,也包括其他来源的数量,包括StackOverflow甚至尝试通过listener处理它,我无法使其正常工作。

无论我在stage / prod上加载什么url,它总是返回500 Server错误。我添加了几个错误页面:

/app/Resources/TwigBundle/views/Exception/
    - error.html.twig
    - error404.html.twig
    - error500.html.twig
    - exception.html.twig
    - exception404.html.twig
    - exception500.html.twig

只是尝试捕获错误和/或异常,但没有变化。尝试加载http://mystage.env/non-existing-url时显示仍然是服务器错误500。它从未真正加载任何错误/异常内容。

app_stage.php app_prod.php 在调试器上都使用false

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

我感觉我在 parameters.yml routing.yml 或两者中都缺少一些明显的配置属性,但我不知道是什么。到目前为止,在我的 config.yml 文件中,Twig配置的一部分是:

# Twig Configuration
twig:
    exception_controller:  twig.controller.exception:showAction
    debug:  "%kernel.debug%"

当我转储模板时,需要在此处加载:

# vendor/symfony/symfony/src/Symfony/Bundle/TwigBundle/Controller/ExceptionController.php

 public function showAction(
     Request $request, 
     FlattenException $exception, 
     DebugLoggerInterface $logger = null
 )
 {
    var_dump((string) $this->findTemplate(
        $request, 
        $request->getRequestFormat(), 
        $code, 
        $this->debug
    )); die;

    #...
 }

它显示了正确的和预期的模板:string 'TwigBundle:Exception:error404.html.twig'但它没有加载它,但返回500 Server错误。

为了记录,我也尝试使用WebfactoryExceptionsBundle,但结果是一样的

修改

我删除了exception_controller的Twig配置行,如评论中所建议的那样。这就是 app / logs / stage.log 所说的内容:

request.ERROR: 
Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: 
"No route found for "GET /nonexisting"" at 
/var/www/html/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/RouterListener.php line 145 
{
 "exception":"[object] (
  Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): 
    No route found for \"GET /nonexisting\" at 
    /var/www/html/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/RouterListener.php:145, 
    Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException(code: 0):  at 
    /var/www/html/app/cache/stage/appStageUrlMatcher.php:1018
 )"
} []

request.ERROR: 
Exception thrown when handling an exception (
 Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException: 
 The security context contains no authentication token. 
 One possible reason may be that there is no firewall configured for this URL.
) 
{
 "exception":"[object] (
   Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): 
   No route found for \"GET /nonexisting\" at 
   /var/www/html/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/RouterListener.php:145, 
   Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException(code: 0):  at 
   /var/www/html/app/cache/stage/appStageUrlMatcher.php:1018
  )"
 } []

无论我是否成功登录,都会记录相同的错误。

0 个答案:

没有答案