2016-02-18 54 views
1

我写在Symfony2中一个REST API,我有我的控制器输出使用提供JsonResponse类JSON响应:在Symfony2中,有没有一种方法可以很好地打印JSON响应?

$response = new JsonResponse(null, $status); 
$response->setData($node['Content']); 
return $response; 

然而,出于调试的目的,这将是很好能够漂亮打印输出。是否有一个参数可以传递给JsonResponse对象以启用输出的漂亮打印?

+2

$ response-> setEncodingOptions($ response-> getEncodingOptions()| JSON_PRETTY_PRINT); –

+2

只需注意,此方法仅适用于自HttpFoundation 2.5+ – hasumedic

+0

你能检查我的答案吗? –

回答

2

您可以为此创建EventListener。这里是我的

use Symfony\Component\HttpKernel\Event\FilterResponseEvent; 
use Symfony\Component\HttpKernel\HttpKernelInterface; 

/** 
* Preetify json response. 
*/ 
class FormatJsonResponseListener 
{ 
    public function onResponse(FilterResponseEvent $event) 
    { 
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) { 
      return; 
     } 

     $request = $event->getRequest(); 
     if (APPLICATION_ENV === 'development' || APPLICATION_ENV === 'dev' || $request->query->get('pretty_json', false) == true) { 
      $response = $event->getResponse(); 
      $responseData = $event->getResponse()->getContent(); 
      $response->setContent(Json::indent($responseData)); 
      $event->setResponse($response); 
     } 
    } 
} 

并与注册该服务:

#services.ym 
services: 
    your.service.listener.format_json: 
     class: Your\Vendor\FormatJsonResponseListener 
     tags: 
      - { name: kernel.event_listener, event: kernel.response, method: onResponse } 

我的JSON类是在这里:https://github.com/sourcefabric/Newscoop/blob/master/newscoop/library/Newscoop/Gimme/Json.php

相反APPLICATION_ENV可以传递给听者参数kernel.debug

您还可以修改响应与(PHP> = 5.4.0,HttpFoundation> = 2.5)

$response->setEncodingOptions($response->getEncodingOptions() | JSON_PRETTY_PRINT);

3

创建一个事件侦听器,正如帕维尔的回答是过度设计。

美化,您只需通过setEncodingOptions传中JSON_PRETTY_PRINT不断向JsonResponse,就像这个例子:

$response = new JsonResponse([ 'your' => 'data' ]); 
$response->setEncodingOptions($response->getEncodingOptions() | JSON_PRETTY_PRINT); 
return $response; 

你可以看到更多信息,Symfony的API:

这是文档v3.2 ...但旧版本例如像v2.7也有这样的方法。

相关问题