Symfony2 : customize error pages for different bundles

前端 未结 2 2021
别跟我提以往
别跟我提以往 2021-02-04 08:48

I have several bundles and I\'d like to know if it is possible to customize for each bundle their own error pages.

I read the cookbook and the examples

相关标签:
2条回答
  • 2021-02-04 09:41

    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.

    0 讨论(0)
  • 2021-02-04 09:44

    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.yml
    kernel.listener.yourlistener:
      class: Your\MainBundle\YourExceptionListener
      tags:
        - { name: kernel.event_listener, event: kernel.exception, method: onKernelException }
    
    0 讨论(0)
提交回复
热议问题