我正在处理symfony2中的错误页面,但是我没有成功覆盖此模板。
任何人都可以描述它如何覆盖所有异常页面。我想要三页error.html.twig,403.html.twig,404.html.twig
我这样做:
首先在此位置创建文件:
app/Resources/TwigBundle/views/Exception
app/Resources/TwigBundle/views/layout.html.twig
我将所有twig例外文件放在Exception文件夹中并编写一些自定义代码。
但我有一段时间成功,有时候有空白页。
此页面在dev env中工作,但在prod env中没有显示。
我想当错误然后错误页面,如果404然后404页面错误,如果被禁止则403页面。
任何人形容我或告诉我如何做到这一点。
如果写一些代码对我有好处吗?
在其他人认为我通过RedirectExceptionListner服务处理所有问题,但我不这样做,因为这是重定向到错误页面。
谢谢!
答案 0 :(得分:0)
在app / Resources / TwigBundle / views / Exception中创建错误+错误数+ .hmlt.twig。
对于404,文件将为error404.html.twig。
希望它有所帮助。
答案 1 :(得分:0)
有两个步骤可以覆盖错误页面。
首先:关注此页面上的教程:http://symfony.com/doc/current/cookbook/controller/error_pages.html。在app / Resources / TwigBundle / views / Exception中创建文件error.html.twig。您还可以创建error404.html.twig和其他错误页面。文件的内容是您的决定。
第二步是在config.yml中添加assetic
assetic:
bundles: ['TwigBundle']
如果没有,你会得到空白页。
当然,不要忘记清除缓存并重新安装资产:
php app/console assetic:dump --env=prod --no-debug
如何知道将呈现哪个错误树枝?对我来说,最好的解决方案是在控制器中创建方法,如:
function findQuestionOr404($questionId)
{
$survey = $this
->getDoctrine()
->getRepository('MyGreatBundle:Question')
->find($questionId)
;
if (!$survey) {
throw $this->createNotFoundException());
}
return $survey;
}
然后在行动中:
public function someAction()
{
$queston = $this->findQuestionOr404($id);
//...
}
这将抛出404错误(如果没有特定$ id的调查)并显示error404.html.twig。当然,您可以在控制器中自由抛出任何Exception类。