此问题与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就足够了吗?

最佳答案

您应该更改其中的几个:

  • ,您需要继承自定义Exception Controller 中的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/

    10-11 08:04