Symfony的2.2延长ExceptionController(Symfony 2.2 exten

2019-08-19 03:07发布

这个问题关系到以下变化 (Symfony的2.2版本的一部分):

第1部分

在前期2.2 Symfony的,我重写ExceptionController显示一些自定义错误页。

我这样做,通过:

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

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

ExceptionController :: __结构()必须Twig_Environment,没有给出,称为实例...

由于ExceptionController是一种服务,现在,我怎么可以改写,什么我需要在我的旧代码的改变?

所有我在自定义的类一样,是改变了的showAction方法模板参考:

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

第2部分

由于ExceptionController不再延长ContainerAware ,我怎么到当前容器? 是否足以实现ContainerAwareInterface

Answer 1:

你应该改变了几个这样的:

  1. 你需要继承ExceptionController在您的自定义异常控制器。
  2. 你需要重写twig.controller.exception.class参数 。 正如你可以看到在服务文件 ,它使用twig.controller.exception.class参数来识别异常控制器类。 现在用你的类重写它:

     parameters: twig.controller.exception.class: My\CustomBundle\CustomExceptionController 
  3. 你需要编辑的签名showAction遵循新的签名

    由于ExceptionController不再延长ContainerAware ,我怎么到当前容器? 是否足以实现ContainerAwareInterface

不,服务应该不是注入容器。 你应该注射在构造需要,作为与完成的服务Twig_Environment服务。

里面的异常控制器,你可以访问到$this->twig属性树枝服务。 而新的签名得到了$request参数,以获得该请求。 我不认为你需要更多。 (你也可以得到$this->debug



文章来源: Symfony 2.2 extend ExceptionController