有人知道如何在不删除旧数据的情况下将新数据字段添加到后过滤器(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
。