此问题与following change(Symfony 2.2发行版的一部分)有关:
第1部分
在2.2之前的Symfony中,我重写了ExceptionController
以显示一些自定义错误页面。
我是通过以下方式做到的:
parameters:
twig.exception_listener.controller: My\CustomBundle\CustomExceptionController::showAction
现在,升级到2.2之后,我将无法再执行此操作,因为生成异常时会抛出异常(无双关语):
由于
ExceptionController
现在是一项服务,因此如何覆盖它,我需要在旧代码中进行哪些更改?我在自定义类中所做的全部更改是showAction方法中的模板引用:
$template = new TemplateReference('TwigBundle', 'Exception', $name, $format, 'twig');
第2部分
由于
ExceptionController
不再扩展ContainerAware
,我如何到达当前容器?实现ContainerAwareInterface
就足够了吗? 最佳答案
您应该更改其中的几个:
ExceptionController
。 twig.controller.exception.class
参数。如您在the service file中所看到的,它使用twig.controller.exception.class
参数来标识异常 Controller 类。现在,用您的类(class)覆盖它:parameters:
twig.controller.exception.class: My\CustomBundle\CustomExceptionController
showAction
的签名以跟随new signature不,服务不应该永远注入(inject)容器。您应该在构造器中注入(inject)所需的服务,就像
Twig_Environment
服务一样。在您的Exception Controller 内部,您可以访问twig服务的
$this->twig
属性。新的签名获得一个$request
参数,以获取请求。我认为您不需要更多。 (您还会获得$this->debug
)关于php - Symfony 2.2扩展ExceptionController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15773273/