过滤后的Symfony - 修改json响应

时间:2015-12-29 12:39:35

标签: php json symfony

有没有人知道如何在过滤器(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(),因此我无法获取旧数据,修改数据并设置新数据。

有谁知道好的解决方案?

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

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