2016-02-18 2 views
1

Я пишу REST API в Symfony2, и у меня есть контроллер вывода ответов JSON, используя предоставленный JsonResponse класс:В 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

Создание слушателя событий для этого, как и в ответе Pawel является переустройством.

приукрасить, вы просто передать в JSON_PRETTY_PRINT константу к JsonResponse через setEncodingOptions, как в этом примере:

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

Вы можете увидеть API Symfony для получения дополнительной информации:

Это документация для v3.2 ... но более старые версии, такие как, например, v2.7 также этот метод.

Смежные вопросы