src/EventListener/DataObject/RequestTransformerListener.php line 26

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventListener\DataObject;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpFoundation\JsonResponse;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpKernel\Event\RequestEvent;
  9. use Symfony\Component\HttpKernel\KernelEvents;
  10. class RequestTransformerListener implements EventSubscriberInterface
  11. {
  12.     /**
  13.      * @inheritDoc
  14.      */
  15.     public static function getSubscribedEvents()
  16.     {
  17.         return [
  18.             KernelEvents::REQUEST => 'onKernelRequest'
  19.         ];
  20.     }
  21.     public function onKernelRequest(RequestEvent $event): void
  22.     {
  23.         $request $event->getRequest();
  24.         if (false === $this->supports($request)) {
  25.             return;
  26.         }
  27.         try {
  28.             $data \json_decode((string) $request->getContent(), true512\JSON_THROW_ON_ERROR);
  29.             if (\is_array($data)) {
  30.                 $request->request->replace($data);
  31.             }
  32.         } catch (\JsonException $exception) {
  33.             $event->setResponse(new JsonResponse(['message' => $exception->getMessage()], Response::HTTP_BAD_REQUEST));
  34.         }
  35.     }
  36.     private function supports(Request $request): bool
  37.     {
  38.         return 'json' === $request->getContentType() && $request->getContent();
  39.     }
  40. }