src/EventListener/JsonRequestTransformerListener.php line 11

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Symfony\Component\HttpFoundation\Request;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpKernel\Event\RequestEvent;
  6. class JsonRequestTransformerListener {
  7.     public function onKernelRequest(RequestEvent $event) {
  8.         $request $event->getRequest();
  9.         $content $request->getContent();
  10.         if (empty($content)) {
  11.             return;
  12.         }
  13.         if (!$this->isJsonRequest($request)) {
  14.             return;
  15.         }
  16.         if (!$this->transformJsonBody($request)) {
  17.             $response Response::create('Unable to parse request.'400);
  18.             $event->setResponse($response);
  19.         }
  20.     }
  21.     private function isJsonRequest(Request $request) {
  22.         return 'json' === $request->getContentType();
  23.     }
  24.     private function transformJsonBody(Request $request) {
  25.         $data json_decode($request->getContent(), true);
  26.         if (json_last_error() !== JSON_ERROR_NONE) {
  27.             return false;
  28.         }
  29.         if ($data === null) {
  30.             return true;
  31.         }
  32.         $request->request->replace($data);
  33.         return true;
  34.     }
  35. }