在Symfony 2中重写了错误定制?

时间:2014-04-25 13:44:47

标签: symfony error-handling twig

我正在处理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服务处理所有问题,但我不这样做,因为这是重定向到错误页面。

谢谢!

2 个答案:

答案 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类。