这个问题与跟随变化 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
?
你应该改变其中的一些:
- 你需要继承
ExceptionController
在您的自定义异常控制器中。
-
你需要覆盖twig.controller.exception.class
范围。正如你所看到的服务文件 https://github.com/symfony/symfony/commit/35d63df044cba20cdf441963ca85a7f4d51200cc#L3R116,它使用twig.controller.exception.class
参数来标识异常控制器类。现在用你的类覆盖它:
parameters:
twig.controller.exception.class: My\CustomBundle\CustomExceptionController
-
您需要编辑的签名showAction
遵循新签名 https://github.com/symfony/symfony/commit/35d63df044cba20cdf441963ca85a7f4d51200cc#L1R48
Since ExceptionController
不再延伸ContainerAware
,如何到达当前容器?是否足以实施ContainerAwareInterface
?
不,服务不应该never注入容器。您应该在构造函数中注入所需的服务,就像使用Twig_Environment
服务。
在异常控制器内,您可以访问$this->twig
树枝服务的属性。新签名得到$request
参数,获取请求。我认为你不需要更多。 (你还得到$this->debug
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)