src/Subscriber/JsonRequestTransformerSubscriber.php line 13

Open in your IDE?
  1. <?php
  2. namespace App\Subscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\HttpKernel\Event\RequestEvent;
  7. use Symfony\Component\HttpKernel\KernelEvents;
  8. class JsonRequestTransformerSubscriber implements EventSubscriberInterface
  9. {
  10.     public function onKernelRequest(RequestEvent $event)
  11.     {
  12.         if (!$this->isSupport($event->getRequest())) {
  13.             return;
  14.         }
  15.         if (false === $this->transform($event->getRequest())) {
  16.             $response = new Response('Unable to parse request.'Response::HTTP_BAD_REQUEST);
  17.             $event->setResponse($response);
  18.         }
  19.     }
  20.     private function isSupport(Request $request)
  21.     {
  22.         return "json" === $request->getContentType() && $request->getContent();
  23.     }
  24.     private function transform(Request $request)
  25.     {
  26.         $data json_decode($request->getContent(), true);
  27.         if (json_last_error() !== JSON_ERROR_NONE) {
  28.             return false;
  29.         }
  30.         if (is_array($data)) {
  31.             $request->request->replace($data);
  32.         }
  33.         return true;
  34.     }
  35.     public static function getSubscribedEvents()
  36.     {
  37.         return [
  38.             KernelEvents::REQUEST => [['onKernelRequest'1]]
  39.         ];
  40.     }
  41. }