我希望在没有找到路由并且抛出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
)"
} []
无论我是否成功登录,都会记录相同的错误。