src/EventSubscriber/JsonRequestFillerSubscriber.php line 39

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\HttpFoundation\RequestStack;
  5. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  6. use Symfony\Component\HttpKernel\KernelEvents;
  7. class JsonRequestFillerSubscriber implements EventSubscriberInterface
  8. {
  9.     /**
  10.      * @var RequestStack
  11.      */
  12.     private $requestStack;
  13.     /**
  14.      * RequestFillerSubscriber constructor.
  15.      *
  16.      * @param RequestStack $requestStack
  17.      */
  18.     public function __construct(RequestStack $requestStack)
  19.     {
  20.         $this->requestStack $requestStack;
  21.     }
  22.     /**
  23.      * @return array
  24.      */
  25.     public static function getSubscribedEvents()
  26.     {
  27.         return [
  28.             KernelEvents::CONTROLLER => [
  29.                 ['fillRequestFromJsonContent'1000],
  30.             ],
  31.         ];
  32.     }
  33.     public function fillRequestFromJsonContent()
  34.     {
  35.         $request $this->requestStack->getCurrentRequest();
  36.         if ('json' !== $request->getContentType() || !$request->getContent()) {
  37.             return;
  38.         }
  39.         $data json_decode($request->getContent(), true);
  40.         if (JSON_ERROR_NONE !== json_last_error()) {
  41.             throw new BadRequestHttpException('Invalid json body: '.json_last_error_msg());
  42.         }
  43.         $request->request->replace(is_array($data) ? $data : []);
  44.     }
  45. }