Symfony 2.2 扩展 ExceptionController

2023-12-26

这个问题与跟随变化 https://github.com/symfony/symfony/commit/35d63df044cba20cdf441963ca85a7f4d51200cc(Symfony 2.2 版本的一部分):

Part 1

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

我是通过以下方式做到的:

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

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

ExceptionController::__construct() 必须是 Twig_Environment 的实例,没有给出,在...中调用

Since ExceptionController现在是一项服务,我如何覆盖它,我需要在旧代码中更改什么?

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

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

Part 2

Since ExceptionController不再延伸ContainerAware,如何到达当前容器?是否足以实施ContainerAwareInterface?


你应该改变其中的一些:

  1. 你需要继承ExceptionController在您的自定义异常控制器中。
  2. 你需要覆盖twig.controller.exception.class范围。正如你所看到的服务文件 https://github.com/symfony/symfony/commit/35d63df044cba20cdf441963ca85a7f4d51200cc#L3R116,它使用twig.controller.exception.class参数来标识异常控制器类。现在用你的类覆盖它:

    parameters:
        twig.controller.exception.class: My\CustomBundle\CustomExceptionController
    
  3. 您需要编辑的签名showAction遵循新签名 https://github.com/symfony/symfony/commit/35d63df044cba20cdf441963ca85a7f4d51200cc#L1R48

    Since ExceptionController不再延伸ContainerAware,如何到达当前容器?是否足以实施ContainerAwareInterface?

不,服务不应该never注入容器。您应该在构造函数中注入所需的服务,就像使用Twig_Environment服务。

在异常控制器内,您可以访问$this->twig树枝服务的属性。新签名得到$request参数,获取请求。我认为你不需要更多。 (你还得到$this->debug)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symfony 2.2 扩展 ExceptionController 的相关文章

随机推荐