如何在Symfony 4中漂亮地打印JsonResponse

我们一直在寻找一种在项目中尽可能轻松地完成复杂工作的方法, 这意味着不断地编程和调试基本内容是我们网站的简单回应。如果你使用自己的API或控制器中返回JSON字符串作为响应的基本响应, 则可能会知道使用Symfony 4的JsonResponse类的响应会返回字符串的精简版本, 就像json_encode方法默认情况下会执行此操作, 例如:

< ?php// src/Controller/PagesController.phpnamespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; class PagesController extends AbstractController{/*** @Route("/", name="app_index")*/public function index(){return new JsonResponse(['name' => "Carlos", 'age' => 22, 'location' => ['city' => 'Bucaramanga', 'state' => 'Santander', 'country' => 'Colombia']]); }}

【如何在Symfony 4中漂亮地打印JsonResponse】这将在浏览器中返回以下字符串作为响应:
{"name":"Carlos", "age":22, "location":{"city":"Bucaramanga", "state":"Santander", "country":"Colombia"}}

如你所见, 即使是单个对象也很难阅读, 因此, 请想象一个巨大的对象将是什么样子!当然, 你可以使用控制器中的dump方法事先调试要返回的对象, 但是, 如果要通过旧的方法进行调试, 最好发送响应的漂亮打印版本以查看它在浏览器中。这很容易做到, 我将在短期内向你解释如何做。
漂亮的打印响应修改响应JsonResponse类具有setEncodingOptions方法, 该方法设置将数据编码为JSON时使用的选项。默认情况下, 该类使用以下选项来编码JSON响应(使用json_encode方法):
// Encode < , > , ', & , and " characters in the JSON, making it also safe to be embedded into HTML.// 15 === JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOTconst DEFAULT_ENCODING_OPTIONS = 15;

然后, 你可以在响应中连接新的JSON_PRETTY_PRINT选项, 如下所示:
$response = new JsonResponse([ // data ]); $response-> setEncodingOptions( $response-> getEncodingOptions() | JSON_PRETTY_PRINT ); return $response;

以下示例显示了如何在控制器中执行此操作:
< ?php// src/Controller/PagesController.phpnamespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; class PagesController extends AbstractController{/*** @Route("/", name="app_index")*/public function index(){$response = new JsonResponse(['name' => "Carlos", 'age' => 22, 'location' => ['city' => 'Bucaramanga', 'state' => 'Santander', 'country' => 'Colombia']]); // Use the JSON_PRETTY_PRINT $response-> setEncodingOptions( $response-> getEncodingOptions() | JSON_PRETTY_PRINT ); return $response; }}

并且它将在浏览器中返回以下字符串作为响应:
{"name": "Carlos", "age": 22, "location": {"city": "Bucaramanga", "state": "Santander", "country": "Colombia"}}

编码愉快!

    推荐阅读