src/EventSubscriber/JsonResponseSubscriber.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\HttpFoundation\JsonResponse;
  5. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  6. use Symfony\Component\HttpKernel\KernelEvents;
  7. class JsonResponseSubscriber implements EventSubscriberInterface
  8. {
  9.     /**
  10.      * {@inheritDoc}
  11.      */
  12.     public static function getSubscribedEvents(): array
  13.     {
  14.         return [
  15.             KernelEvents::RESPONSE => 'onKernelResponse',
  16.         ];
  17.     }
  18.     public function onKernelResponse(ResponseEvent $event)
  19.     {
  20.         $response $event->getResponse();
  21.         if (!$response->isSuccessful() && !$response->isClientError() && !$response->isServerError()) {
  22.             return;
  23.         }
  24.         $contentType $response->headers->get('Content-Type');
  25.         if (false === strpos($contentType'json')) {
  26.             return;
  27.         }
  28.         $content json_decode($response->getContent(), true);
  29.         if (\JSON_ERROR_NONE !== json_last_error()) {
  30.             return;
  31.         }
  32.         if ($response->isSuccessful()) {
  33.             $content = ['data' => $content];
  34.         } else {
  35.             $content = ['error' => $content];
  36.         }
  37.         $jsonResponse = new JsonResponse($content$response->getStatusCode(), $response->headers->all());
  38.         $event->setResponse($jsonResponse);
  39.     }
  40. }