isy*_*ate 8 php exception-handling symfony symfony-2.2
此问题与以下更改有关(Symfony 2.2发行版的一部分):
第1部分
在2.2版之前的Symfony中,我重写ExceptionController了显示一些自定义错误页面.
我这样做是通过:
parameters:
twig.exception_listener.controller: My\CustomBundle\CustomExceptionController::showAction
Run Code Online (Sandbox Code Playgroud)
现在,在升级到2.2之后,我再也不能这样做,因为在生成异常时抛出异常(没有双关语):
ExceptionController :: __ construct()必须是Twig_Environment的一个实例,没有给定,在...中调用
既然ExceptionController现在是服务,我该如何覆盖它,以及在旧代码中需要更改什么?
我在自定义类中所做的全部更改了showAction方法中的模板引用:
$template = new TemplateReference('TwigBundle', 'Exception', $name, $format, 'twig');
Run Code Online (Sandbox Code Playgroud)
第2部分
由于ExceptionController不再延伸ContainerAware,我如何到达当前容器?是否足以实施ContainerAwareInterface?
Wou*_*r J 12
你应该改变这几个:
ExceptionController自定义的异常控制器.你需要覆盖twig.controller.exception.class参数.正如您在服务文件中看到的,它使用twig.controller.exception.class参数来标识异常控制器类.现在用你的类覆盖它:
parameters:
twig.controller.exception.class: My\CustomBundle\CustomExceptionController
Run Code Online (Sandbox Code Playgroud)您需要编辑签名showAction以遵循新签名
由于
ExceptionController不再延伸ContainerAware,我如何到达当前容器?是否足以实施ContainerAwareInterface?
不,服务不应该永远不会注入容器.您应该像在服务中那样在构造函数中注入所需的Twig_Environment服务.
在您的Exception控制器中,您可以访问$this->twigtwig服务的属性.并且新签名获取$request参数以获取请求.我认为你不需要更多.(你也得到$this->debug)