php – Symfony 2.2扩展ExceptionController

这个问题与 following change(Symfony 2.2版本的一部分)有关:

第1部分

在2.2之前的Symfony中,我重写了ExceptionController以显示一些自定义错误页面.

我这样做是通过:

parameters:
       twig.exception_listener.controller: My\CustomBundle\CustomExceptionController::showAction

现在,在升级到2.2后,我再也不能这样做,因为在生成异常时抛出异常(没有双关语):

ExceptionController::__construct() must be an instance of Twig_Environment,none given,called in…

由于ExceptionController现在是一个服务,我如何覆盖它,以及我需要在旧代码中更改什么?

我在自定义类中所做的全部更改了showAction方法中的模板引用:

$template = new TemplateReference('TwigBundle','Exception',$name,$format,'twig');

第2部分

由于ExceptionController不再扩展ContainerAware,我如何到达当前容器?是否足以实现ContainerAwareInterface?

你应该改变这几个:

>您需要在自定义Exception控制器中继承ExceptionController.
>您需要覆盖twig.controller.exception.class参数.正如您在the service file中看到的,它使用twig.controller.exception.class参数来标识异常控制器类.现在用你的类覆盖它:

parameters:
    twig.controller.exception.class: My\CustomBundle\CustomExceptionController

>您需要编辑showAction的签名以遵循new signature

Since ExceptionController no longer extends ContainerAware,how do I get to the current container? Is it enough to implement ContainerAwareInterface?

不,服务不应该永远不会注入容器.您应该在构造函数中注入所需的服务,就像使用Twig_Environment服务一样.

在您的Exception控制器中,您可以访问twig服务的$this-> twig属性.并且新签名获取$request参数,以获取请求.我认为你不需要更多. (你也得到$this-> debug)

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...