Переопределение JsonResponse
Необходимо реализовать следующий функционал:
При вызове new JsonResponse($arg) нужно проверять: если выполняется is_method($arg->toArray()) то передавать в $arg результат выполнения ->toArray()
Каким образом грамотней это реализовать?
ArgumentResolver проверяет сам аргумент, но мне не везде нужно передавать ->toArray() при его наличии у объекта.
Мне же необходимо реализовать преобразование аргумента только при вызове конструктора JsonResponse.
На данный момент реализован слушатель событий, который применяет encoding к объекту-экземпляру JsonResponse:
<?php
declare(strict_types=1);
namespace App\EventListener;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
/**
* Class JsonResponseFormatterListener
* @package App\EventListener
*/
class JsonResponseFormatterListener
{
public function onKernelResponse(ResponseEvent $event)
{
$response = $event->getResponse();
if ($response instanceof JsonResponse) {
$response->setEncodingOptions(JSON_UNESCAPED_UNICODE);
}
}
}
Однако уже на этом моменте в Response находится результат выполнения new JsonResponse($arg), а поскольку $arg - объект, то внутри JsonResponse содержится некорректная структура.
Спасибо!