src/Subscribers/BeforeControllerActionSubscriber.php line 45

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. /**
  3.  *
  4.  * (c) BonBonSlick
  5.  *
  6.  */
  7. /**
  8.  * (c) BonBonSlick
  9.  */
  10. /*
  11.  * Created by BonBonSlick
  12.  * Contacts: google it
  13.  * Date: 10/13/18
  14.  * Time: 2:21 PM
  15.  */
  16. namespace App\Subscribers;
  17. use function is_array;
  18. use function json_decode;
  19. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  20. use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
  21. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  22. use Symfony\Component\HttpKernel\KernelEvents;
  23. /**
  24.  * Class self
  25.  */
  26. final class BeforeControllerActionSubscriber implements EventSubscriberInterface
  27. {
  28.     /**
  29.      * @return array
  30.      */
  31.     public static function getSubscribedEvents(): array
  32.     {
  33.         return [
  34.             KernelEvents::CONTROLLER => 'convertJsonStringToArray',
  35.         ];
  36.     }
  37.     /**
  38.      * @param FilterControllerEvent $event
  39.      */
  40.     public function convertJsonStringToArray(FilterControllerEvent $event): void
  41.     {
  42.         $request $event->getRequest();
  43.         $requestContent $request->getContent();
  44.         // check if json and not empty content
  45.         $isContentEmpty true === empty($requestContent) || null === $requestContent || '' === trim($requestContent);
  46.         if (true === $isContentEmpty || $request->getContentType() !== 'json') {
  47.             return;
  48.         }
  49.         // check for errors
  50.         $jsonContent json_decode($request->getContent(), true);
  51.         if (json_last_error() !== JSON_ERROR_NONE) {
  52.             throw new BadRequestHttpException('Invalid json body: ' json_last_error_msg());
  53.         }
  54.         // replace request data with json content
  55.         $request->request->replace(is_array($jsonContent) ? $jsonContent : []);
  56.     }
  57. }