src/EventSubscriber/ExceptionSubscriber.php line 37

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: grigor
  5.  * Date: 9/25/18
  6.  * Time: 4:39 PM
  7.  */
  8. namespace App\EventSubscriber;
  9. use Psr\Log\LoggerInterface;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
  14. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  15. use Symfony\Component\HttpKernel\KernelEvents;
  16. use Symfony\Component\HttpKernel\KernelInterface;
  17. class ExceptionSubscriber implements EventSubscriberInterface
  18. {
  19.     /**
  20.      * @var KernelInterface
  21.      */
  22.     private $kernel;
  23.     /**
  24.      * @var LoggerInterface
  25.      */
  26.     private $logger;
  27.     public function __construct(KernelInterface $kernelLoggerInterface $logger)
  28.     {
  29.         $this->kernel $kernel;
  30.         $this->logger $logger;
  31.     }
  32.     public function onKernelException(GetResponseForExceptionEvent $event)
  33.     {
  34.         $e $event->getException();
  35.         if ($e instanceof NotFoundHttpException) {
  36.             $response = new JsonResponse(''Response::HTTP_NOT_FOUND);
  37.         } else {
  38.             $responseData = ['message' => 'Unidentified internal error'];
  39.             $devMessage = [
  40.                 'message' => $e->getMessage(),
  41.                 'type' => get_class($e),
  42.                 'file' => $e->getFile(),
  43.                 'line' => $e->getLine()
  44.             ];
  45.             $responseData['dev_message'] = $devMessage;
  46.             $this->logger->error(print_r($responseDatatrue));
  47.             if ($this->kernel->getEnvironment() != 'dev') {
  48.                 unset($responseData['dev_message']);
  49.             }
  50.             $response = new JsonResponse($responseDataResponse::HTTP_CONFLICT);
  51.         }
  52.         $event->setResponse($response);
  53.     }
  54.     /**
  55.      * Returns an array of event names this subscriber wants to listen to.
  56.      *
  57.      * The array keys are event names and the value can be:
  58.      *
  59.      *  * The method name to call (priority defaults to 0)
  60.      *  * An array composed of the method name to call and the priority
  61.      *  * An array of arrays composed of the method names to call and respective
  62.      *    priorities, or 0 if unset
  63.      *
  64.      * For instance:
  65.      *
  66.      *  * array('eventName' => 'methodName')
  67.      *  * array('eventName' => array('methodName', $priority))
  68.      *  * array('eventName' => array(array('methodName1', $priority), array('methodName2')))
  69.      *
  70.      * @return array The event names to listen to
  71.      */
  72.     public static function getSubscribedEvents()
  73.     {
  74.         return array(
  75.             KernelEvents::EXCEPTION => 'onKernelException'
  76.         );
  77.     }
  78. }