Aprende a enviar una versión impresa bonita de la clase JsonResponse en Symfony 4.

Cómo imprimir de forma estética un JsonResponse (respuesta JSON) en Symfony 4

Constantemente buscamos una manera de hacer cosas complicadas tan fáciles como sea posible en nuestros proyectos, esto significa programación constante y depuración de cosas básicas como respuestas simples de nuestro sitio web. En caso de que esté trabajando con su propia API o simplemente con una respuesta básica en su controlador que devuelve una cadena JSON como respuesta, puede saber que las respuestas que usan la clase JsonResponse de Symfony 4 devuelven una versión reducida de la cadena, al igual que la json_encodemétodo lo hace por defecto, por ejemplo:

<?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'
            ]
        ]);
    }
}

Esto devolverá como respuesta en el navegador la siguiente cadena:

{"name":"Carlos","age":22,"location":{"city":"Bucaramanga","state":"Santander","country":"Colombia"}}

Como puede ver, incluso este único objeto es difícil de leer, ¡así que imagine cómo se vería un objeto enorme! Por supuesto, puede depurar previamente los objetos que desea devolver usando el método dump en su controlador, sin embargo, si desea hacerlo a la manera de la vieja escuela, sería genial enviar una versión bastante impresa de la respuesta para verla. en el navegador. Esto se puede hacer fácilmente y en breve te explicaré cómo hacerlo.

Respuesta de impresión bonita modificando la respuesta

La clase JsonResponse tiene el método setEncodingOptions, un método que establece las opciones utilizadas al codificar datos en JSON. De forma predeterminada, la clase usa las siguientes opciones para codificar la respuesta JSON (con el método json_encode):

// Codifique los caracteres <,>, ', & y "en JSON, lo que también hace que sea seguro incrustarlo en HTML.
// 15 === JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT
const DEFAULT_ENCODING_OPTIONS = 15;

Luego puede concatenar la nueva opción JSON_PRETTY_PRINT como esta en la respuesta:

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

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

return $response;

El siguiente ejemplo muestra cómo hacerlo en un controlador:

<?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'
            ]
        ]);
        
        // Usar metodo JSON_PRETTY_PRINT 
        $response->setEncodingOptions( $response->getEncodingOptions() | JSON_PRETTY_PRINT );
        
        return $response;
    }
}

Y devolverá la siguiente cadena como respuesta en el navegador:

{
    "name": "Carlos",
    "age": 22,
    "location": {
        "city": "Bucaramanga",
        "state": "Santander",
        "country": "Colombia"
    }
}

Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores