This question is related to the following change (part of Symfony 2.2 release):
Part 1
In pre-2.2 Symfony, I was overriding ExceptionController
to display some custom error pages.
I did that via:
parameters:
twig.exception_listener.controller: My\CustomBundle\CustomExceptionController::showAction
Now, after upgrading to 2.2, I can no longer do that, because an exception is thrown while generating an exception (no pun intended):
ExceptionController::__construct() must be an instance of Twig_Environment, none given, called in...
Since ExceptionController
is a service now, how can I override that, and what do I need to change in my old code?
All I did in the custom class, is changed the template reference in showAction method:
$template = new TemplateReference('TwigBundle', 'Exception', $name, $format, 'twig');
Part 2
Since ExceptionController
no longer extends ContainerAware
, how do I get to the current container? Is it enough to implement ContainerAwareInterface
?
You should change a couple of this:
ExceptionController
in your custom Exception controller.you need to override the twig.controller.exception.class
parameter. As you can see in the service file, it uses the twig.controller.exception.class
parameter to identify the exception controller class. Now override it with your class:
parameters:
twig.controller.exception.class: My\CustomBundle\CustomExceptionController
you need to edit the signature of the showAction
to follow the new signature
Since
ExceptionController
no longer extendsContainerAware
, how do I get to the current container? Is it enough to implementContainerAwareInterface
?
No, services shouldn't never inject the container. You should inject the services you need in the constructor, as is done with the Twig_Environment
service.
Inside your Exception controller, you get access to the $this->twig
property for the twig service. And the new signature gets a $request
parameter, to get the request. I don't think you need more. (you also get $this->debug
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With