我们一直在寻找一种在项目中尽可能轻松地完成复杂工作的方法, 这意味着不断地编程和调试基本内容是我们网站的简单回应。如果你使用自己的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"
}
}
编码愉快!
评论前必须登录!
注册