Переопределение 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 содержится некорректная структура. Спасибо!


Ответы (0 шт):