有没有人知道如何在过滤器(Symfony\Component\HttpFoundation\JsonResponse
)之后将新数据字段添加到现有JsonResponse(onKernelResponse
)而不删除旧数据?
例如,我有自定义控制器
<?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()
,因此我无法获取旧数据,修改数据并设置新数据。
有谁知道好的解决方案?
提前致谢!
答案 0 :(得分:1)
您可以使用getContent()
解码数据,然后修改数据并重新设置数据。
或者,您可以将控制器更改为仅返回数据并在事件侦听器中创建JsonResponse
。