[英]Symfony Throw custom 404 page inside service
我需要在服务内部抛出异常
$isLangExist = $this->em->getRepository('TranslationBundle:Language')->findOneBy(array(
'locale' => $this->request->getMasterRequest()->getLocale()
));
if (!$isLangExist) {
throw new createNotFoundException('you are using unavailable langage');
}
但我知道此页面在prod env中不起作用
如何显示带有createNotFoundException或其他任何异常类型的404页面
谢谢
看起来您的代码不正确。 我希望它看起来像这样:
if (!$isLangExist) {
throw $this->createNotFoundException('you are using unavailable langage');
}
该方法是您可以使用的抽象基本控制器的一部分,但不是强制性的。 在不扩展此控制器的情况下应该工作的是:
if (!$isLangExist) {
throw new NotFoundHttpException('you are using unavailable langage');
}
您的问题超出了上面的代码,因为您没有像我期望的那样在控制器内引发异常。 您将其扔到Twig扩展中。 此异常将中断渲染,因此,该错误不会转换为404异常,而是被视为500错误。 每当其中一个查询失败时,您的扩展名可能还会看到其他500错误,这可能不是您想要的。 解决此问题可能需要重新考虑如何使用这些全局树枝变量。
您可以尝试将使用这些变量的模板移到由专用控制器使用子请求或ESI呈现的单独模板中:
{{
render(controller(
'AppBundle:Global:_listCategories',
{
'locale': app.request.attributes.get('_locale')
}
))
}}
另一个解决方案可能是,每当发生故障时,将它们设置为null
或错误对象,然后对模板中的这些“替代”结果做出反应,这不是我想要的。
可能还有许多其他方法可以解决此问题。 要点是:呈现错误与控制器服务引发的http异常不同。 您必须确保尽管存在这些丢失/错误的变量也可以呈现模板,或者在呈现模板之前(例如在事件侦听器中)处理这些缺失的参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.