src/Evo/Application/Payload/Listener/PayloadValidationListener.php line 31

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Evo\Application\Payload\Listener;
  4. use Evo\Application\Payload\Exception\PayloadValidationException;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  9. use Symfony\Component\HttpKernel\KernelEvents;
  10. use Symfony\Component\Serializer\SerializerInterface;
  11. final class PayloadValidationListener implements EventSubscriberInterface
  12. {
  13.     private SerializerInterface $serializer;
  14.     public function __construct(SerializerInterface $serializer)
  15.     {
  16.         $this->serializer $serializer;
  17.     }
  18.     public static function getSubscribedEvents(): array
  19.     {
  20.         return [
  21.             KernelEvents::EXCEPTION => 'onException',
  22.         ];
  23.     }
  24.     public function onException(ExceptionEvent $event): void
  25.     {
  26.         if (!$event->getThrowable() instanceof PayloadValidationException) {
  27.             return;
  28.         }
  29.         /** @var PayloadValidationException $exception */
  30.         $exception $event->getThrowable();
  31.         $event->setResponse(
  32.             new JsonResponse(
  33.                 $this->serializer->serialize($exception->getConstraintViolationList(), 'json'),
  34.                 Response::HTTP_BAD_REQUEST,
  35.                 [],
  36.                 true
  37.             )
  38.         );
  39.     }
  40. }