<?php
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class JsonResponseSubscriber implements EventSubscriberInterface
{
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents(): array
{
return [
KernelEvents::RESPONSE => 'onKernelResponse',
];
}
public function onKernelResponse(ResponseEvent $event)
{
$response = $event->getResponse();
if (!$response->isSuccessful() && !$response->isClientError() && !$response->isServerError()) {
return;
}
$contentType = $response->headers->get('Content-Type');
if (false === strpos($contentType, 'json')) {
return;
}
$content = json_decode($response->getContent(), true);
if (\JSON_ERROR_NONE !== json_last_error()) {
return;
}
if ($response->isSuccessful()) {
$content = ['data' => $content];
} else {
$content = ['error' => $content];
}
$jsonResponse = new JsonResponse($content, $response->getStatusCode(), $response->headers->all());
$event->setResponse($jsonResponse);
}
}