vendor/friendsofsymfony/rest-bundle/EventListener/ExceptionListener.php line 14

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the FOSRestBundle package.
  4.  *
  5.  * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace FOS\RestBundle\EventListener;
  11. @trigger_error(sprintf('The %s\ExceptionListener class is deprecated since FOSRestBundle 2.8.'__NAMESPACE__), E_USER_DEPRECATED);
  12. use FOS\RestBundle\FOSRestBundle;
  13. use Symfony\Component\Debug\Exception\FlattenException as LegacyFlattenException;
  14. use Symfony\Component\ErrorHandler\Exception\FlattenException;
  15. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  16. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  17. use Symfony\Component\HttpKernel\Event\ControllerArgumentsEvent;
  18. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  19. use Symfony\Component\HttpKernel\EventListener\ExceptionListener as LegacyExceptionListener;
  20. use Symfony\Component\HttpKernel\EventListener\ErrorListener;
  21. use Symfony\Component\HttpKernel\KernelEvents;
  22. /**
  23.  * ExceptionListener.
  24.  *
  25.  * @author Ener-Getick <[email protected]>
  26.  *
  27.  * @deprecated since 2.8
  28.  */
  29. class ExceptionListener implements EventSubscriberInterface
  30. {
  31.     private $exceptionListener;
  32.     private $dispatcher;
  33.     public function __construct($exceptionListenerEventDispatcherInterface $dispatcher)
  34.     {
  35.         if (!$exceptionListener instanceof ErrorListener && !$exceptionListener instanceof LegacyExceptionListener) {
  36.             throw new \TypeError(sprintf('The first argument of %s() must be an instance of %s or %s (%s given).'__METHOD__ErrorListener::class, LegacyExceptionListener::class, is_object($errorListener) ? get_class($errorListener) : gettype($errorListener)));
  37.         }
  38.         $this->exceptionListener $exceptionListener;
  39.         $this->dispatcher $dispatcher;
  40.     }
  41.     /**
  42.      * @param ExceptionEvent $event
  43.      */
  44.     public function onKernelException($event)
  45.     {
  46.         $request $event->getRequest();
  47.         if (!$request->attributes->get(FOSRestBundle::ZONE_ATTRIBUTEtrue)) {
  48.             return;
  49.         }
  50.         if (method_exists($event'getThrowable')) {
  51.             $exception $event->getThrowable();
  52.         } else {
  53.             $exception $event->getException();
  54.         }
  55.         $controllerArgsListener = function ($event) use (&$controllerArgsListener$exception) {
  56.             /** @var ControllerArgumentsEvent $event */
  57.             $arguments $event->getArguments();
  58.             foreach ($arguments as $k => $argument) {
  59.                 if ($argument instanceof FlattenException || $argument instanceof LegacyFlattenException) {
  60.                     $arguments[$k] = $exception;
  61.                     $event->setArguments($arguments);
  62.                     break;
  63.                 }
  64.             }
  65.             $this->dispatcher->removeListener(KernelEvents::CONTROLLER_ARGUMENTS$controllerArgsListener);
  66.         };
  67.         $this->dispatcher->addListener(KernelEvents::CONTROLLER_ARGUMENTS$controllerArgsListener, -100);
  68.         $this->exceptionListener->onKernelException($event);
  69.     }
  70.     /**
  71.      * {@inheritdoc}
  72.      */
  73.     public static function getSubscribedEvents()
  74.     {
  75.         return [
  76.             KernelEvents::EXCEPTION => ['onKernelException', -100],
  77.         ];
  78.     }
  79. }