src/WebserviceBundle/Event/ExceptionListener.php line 47

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: mitchellherrijgers
  5.  * Date: 19-10-16
  6.  * Time: 16:20
  7.  */
  8. namespace WebserviceBundle\Event;
  9. use JMS\Serializer\SerializationContext;
  10. use JMS\Serializer\Serializer;
  11. use Symfony\Bridge\Monolog\Logger;
  12. use Symfony\Component\HttpFoundation\JsonResponse;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
  15. use Symfony\Component\Validator\Exception\ValidatorException;
  16. use WmsBundle\Exceptions\ProcessException;
  17. use WmsBundle\Services\LoggerService;
  18. /**
  19.  * Class ExceptionListener
  20.  * @package WebserviceBundle\Event
  21.  */
  22. class ExceptionListener
  23. {
  24.     /** @var Serializer */
  25.     protected $serializer;
  26.     /** @var LoggerService */
  27.     protected $loggerService;
  28.     /**
  29.      * ExceptionListener constructor.
  30.      * @param Serializer $serializer
  31.      * @param Logger $logger
  32.      */
  33.     public function __construct(Serializer $serializerLoggerService $loggerService)
  34.     {
  35.         $this->serializer $serializer;
  36.         $this->loggerService $loggerService;
  37.     }
  38.     /**
  39.      * @param GetResponseForExceptionEvent $event
  40.      * @throws \InvalidArgumentException
  41.      */
  42.     public function onKernelException(GetResponseForExceptionEvent $event)
  43.     {
  44.         // custom validator exception
  45.         if ($event->getException() instanceof \WmsBundle\Exceptions\ValidatorException) {
  46.             $response = new JsonResponse(
  47.                 [
  48.                     'errors' => [$event->getException()->getMessage()],
  49.                 ],
  50.                 $event->getException()->getCode()
  51.             );
  52.             $event->setResponse($response);
  53.             return;
  54.         }
  55.         if (!$event->getException() instanceof ProcessException && !$event->getException() instanceof ValidatorException) {
  56.             return;
  57.         }
  58.         /** @var ProcessException $e */
  59.         $e $event->getException();
  60.         $response null;
  61.         if (method_exists($e'getTasks') && is_array($e->getTasks())) {
  62.             $context SerializationContext::create()->setGroups([
  63.                 'id',
  64.                 'tasks',
  65.                 'locations',
  66.                 'variants',
  67.                 'users',
  68.                 'address'
  69.             ]);
  70.             $response = new Response(
  71.                 $this->serializer->serialize(
  72.                     $e->getTasks(),
  73.                     'json',
  74.                     $context
  75.                 ),
  76.                 409
  77.             );
  78.         } else {
  79.             $response = new Response(
  80.                 $e->getMessage(),
  81.                 412,
  82.                 [
  83.                     'Content-Type' => 'text/plain'
  84.                 ]
  85.             );
  86.         }
  87.         if ($e instanceof ProcessException) {
  88.             $this->loggerService->logTaskException($e);
  89.         }
  90.         $event->setResponse($response);
  91.     }
  92. }