Symfony2 : customize error pages for different bundles
The listener itself would have to detect that - I'm not aware of any way to specify a listener for a single bundle.
<?namespace Your\MainBundle\EventListener;use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;class YourExceptionListener{ public function onKernelException(GetResponseForExceptionEvent $event) { $exception = $event->getException(); $namespace = new \ReflectionObject( $event->getController() )->getNamespaceName(); switch ( $namespace ) { case 'Acme\\DemoBundle': // do whatever with $exception here break; case 'Some\\OtherBundle': // do whatever with $exception here break; case 'Your\\MainBundle': // do whatever with $exception here break; default; // default } }}
And register it
//services.ymlkernel.listener.yourlistener: class: Your\MainBundle\YourExceptionListener tags: - { name: kernel.event_listener, event: kernel.exception, method: onKernelException }
There's a bundle i've made for catch different errors pages from routes regex configuration, it works from the "kernel.exception_listener" listener and the "kernel.exception" event as described in documentation (http://symfony.com/doc/current/cookbook/controller/error_pages.html#use-kernel-exception-event).
With this bundle, you can:
- Change the twig exception template from regex of the route you want
- Change the twig exception template for certains http status code only
- Enable / Disable the custom template for the debug mode
Link to the bundle (MIT licence): https://github.com/Kwrz/TwigException
Thanks for your idea Peter, I think add a feature in the next version of my bundle to define the template from the corresponding bundle namespace.