我需要在服务中抛出一个Exception
$isLangExist = $this->em->getRepository('TranslationBundle:Language')->findOneBy(array(
'locale' => $this->request->getMasterRequest()->getLocale()
));
if (!$isLangExist) {
throw new createNotFoundException('you are using unavailable langage');
}
Run Code Online (Sandbox Code Playgroud)
但我得到的这个页面并不是prod env中的workinc
如何使用createNotFoundException或任何其他Exception类型显示404页面
谢谢
看起来你的代码不正确.我希望它看起来像这样:
if (!$isLangExist) {
throw $this->createNotFoundException('you are using unavailable langage');
}
Run Code Online (Sandbox Code Playgroud)
该方法是您可以使用的抽象基本控制器的一部分,但它不是必需的.在不扩展此控制器的情况下应该起作用的是:
if (!$isLangExist) {
throw new NotFoundHttpException('you are using unavailable langage');
}
Run Code Online (Sandbox Code Playgroud)
您的问题超出了上述代码,因为您没有像我预期的那样将异常抛出到控制器中.你把它扔进一个Twig扩展.此异常将中断呈现,这就是错误未转换为404异常而被视为500错误的原因.当其中一个查询失败时,您可能会在扩展程序中看到其他500个错误,这可能不是您想要的.解决此问题可能需要重新思考如何使用这些全局树枝变量.
您可以尝试将使用这些变量的模板移动到由专用控制器使用子请求或ESI 呈现的单独模板中:
{{
render(controller(
'AppBundle:Global:_listCategories',
{
'locale': app.request.attributes.get('_locale')
}
))
}}
Run Code Online (Sandbox Code Playgroud)
另一种解决方案可能是在出现问题时设置这些null或错误对象,然后对模板中的这些"替代"结果做出反应,这不是我想要的.
可能还有很多其他方法可以解决这个问题.要点是:渲染错误不同于控制器服务抛出的http异常.您必须确保您的模板可以呈现,尽管这些缺失/错误的变量或在渲染模板之前处理这些缺少的参数,例如在事件监听器中.
| 归档时间: |
|
| 查看次数: |
197 次 |
| 最近记录: |