个性化阅读
专注于IT技术分析

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

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

<?php

// src/Controller/PagesController.php
namespace 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'
            ]
        ]);
    }
}

这将在浏览器中返回以下字符串作为响应:

{"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_QUOT
const DEFAULT_ENCODING_OPTIONS = 15;

然后, 你可以在响应中连接新的JSON_PRETTY_PRINT选项, 如下所示:

$response = new JsonResponse([ // data ]);

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

return $response;

以下示例显示了如何在控制器中执行此操作:

<?php

// src/Controller/PagesController.php
namespace 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"
    }
}

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何在Symfony 4中漂亮地打印JsonResponse

评论 抢沙发

评论前必须登录!