Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 过滤器后的Symfony-修改json响应_Php_Json_Symfony - Fatal编程技术网

Php 过滤器后的Symfony-修改json响应

Php 过滤器后的Symfony-修改json响应,php,json,symfony,Php,Json,Symfony,有人知道如何在不删除旧数据的情况下,将新数据字段添加到after filter(onKernelResponse)中现有的JsonResponse(Symfony\Component\HttpFoundation\JsonResponse)中吗 例如,我有自定义控制器 <?php class MessageController extends Controller { public function getAllMessagesAction(Request $request)

有人知道如何在不删除旧数据的情况下,将新数据字段添加到after filter(
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,
        ));
    }
}

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


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

您已经非常接近了,但是您正在寻找的方法被称为
setContent()
getContent()
。也是JsonResponse.yes,
json_decode($response->getContent(),true)似乎是最好的解决方案。但另一方面,如果有多个侦听器,响应内容将包含超过1k的元素,该怎么办?这可能会降低整个应用程序的速度。我现在在想,也许更好的方法是用自己的类扩展
JsonResponse
,并添加
getData
方法?
<?php
class NotesListener
{
    public function onKernelResponse(FilterResponseEvent $event)
    {
        (...)

        $response = $event->getResponse();
        if ($response instanceof JsonResponse) {
            $response->setData(array('foo' => 'bar'));
        }
    }
}