Метод setEncodingOptions
Метод setEncodingOptions класса JsonResponse
задаёт битовую маску опций для функции json_encode.
Это позволяет управлять форматированием, экранированием
и глубиной вложенности JSON-ответа. Первым параметром
передаётся целое число - комбинация констант JSON_*.
Метод возвращает $this, что позволяет строить цепочку вызовов.
Синтаксис
public function setEncodingOptions(int $encodingOptions): static
Пример
Давайте создадим JSON-ответ с красивым форматированием:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Attribute\Route;
class ApiController extends AbstractController
{
#[Route('/api/data', name: 'api_data')]
public function data(): JsonResponse
{
$res = new JsonResponse(['a' => 1, 'b' => 2, 'c' => 3]);
$res->setEncodingOptions(JSON_PRETTY_PRINT);
return $res;
}
}
?>
Результат выполнения кода:
{
"a": 1,
"b": 2,
"c": 3
}
Пример
Давайте объединим несколько флагов, чтобы получить неэкранированные слэши и красивое форматирование:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Attribute\Route;
class ApiController extends AbstractController
{
#[Route('/api/url', name: 'api_url')]
public function url(): JsonResponse
{
$res = new JsonResponse(['url' => 'https://example.com/article']);
$res->setEncodingOptions(JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
return $res;
}
}
?>
Результат выполнения кода:
{
"url": "https://example.com/article"
}
Пример
Давайте зададим опции через цепочку вызовов вместе с setData:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Attribute\Route;
class ApiController extends AbstractController
{
#[Route('/api/chain', name: 'api_chain')]
public function chain(): JsonResponse
{
return (new JsonResponse())
->setEncodingOptions(JSON_UNESCAPED_UNICODE)
->setData(['text' => 'abcde']);
}
}
?>
Результат выполнения кода:
{"text":"abcde"}
Смотрите также
-
класс
JsonResponse,
который формирует JSON-ответ -
метод
setData,
который задаёт данные ответа -
метод
fromJsonString,
который создаёт ответ из JSON-строки -
класс
Response,
который представляет базовый HTTP-ответ