Symfony After Filters-修改json响应


Symfony After Filters - modify json response

有人知道如何在不删除旧数据的情况下将新数据字段添加到后过滤器(onKernelResponse)中的现有JsonResponse(Symfony'Component'HttpFoundation'JsonResponse)中吗?

例如,我有自定义控制器

<?php
class MessageController extends Controller
{
    public function getAllMessagesAction(Request $request)
    {
        (...)
        return new JsonResponse(array(
            'count' => count($messages),
            'total_count' => $allMessagesCount,
            'messages' => $messages,
        ));
    }
}

和一些听众

<?php
class NotesListener
{
    public function onKernelResponse(FilterResponseEvent $event)
    {
        (...)
        $response = $event->getResponse();
        if ($response instanceof JsonResponse) {
            $response->setData(array('foo' => 'bar'));
        }
    }
}

问题

问题是侦听器中的$response->setData将覆盖控制器中传递的数据。此外,JsonResponse没有像addData()那样的方法。不幸的是,没有方法getData(),所以我无法获取旧数据、修改它和设置新数据。

有人知道好的解决方案吗?

提前感谢!

您可以使用getContent()对数据进行解码,然后对其进行修改并重新设置数据。

或者,您可以更改控制器,只返回数据并在事件侦听器中创建JsonResponse