Класс JsonResponse
Класс JsonResponse наследуется от Response
и автоматически кодирует переданные данные в формат
JSON. Первым параметром конструктора передаются
данные для сериализации, вторым - HTTP-статус,
третьим - массив заголовков, четвёртым - флаг
JSON_HEX_TAG. По умолчанию ответ получает
заголовок Content-Type: application/json
и статус 200.
Синтаксис
new JsonResponse(data, status, headers, json)
Пример
Давайте вернём из контроллера простой массив:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationJsonResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): JsonResponse
{
$res = ['a', 'b', 'c'];
return new JsonResponse($res);
}
}
?>
Результат выполнения кода:
["a","b","c"]
Пример
Давайте вернём ассоциативный массив с полями сущности:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationJsonResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/show', name: 'article_show')]
public function show(): JsonResponse
{
$res = [
'string' => 'abcde',
'text' => 'article',
'integer' => 1,
'boolean' => true
];
return new JsonResponse($res);
}
}
?>
Результат выполнения кода:
{"string":"abcde","text":"article","integer":1,"boolean":true}
Пример
Давайте зададим HTTP-статус вторым параметром:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationJsonResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/error', name: 'article_error')]
public function error(): JsonResponse
{
$res = ['error' => 'user'];
return new JsonResponse($res, 404);
}
}
?>
Результат выполнения кода:
{"error":"user"}
Пример
Давайте создадим ответ из готовой строки JSON
с помощью статического метода fromJsonString:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationJsonResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/raw', name: 'article_raw')]
public function raw(): JsonResponse
{
$json = '{"string":"hello","integer":1}';
return JsonResponse::fromJsonString($json);
}
}
?>
Результат выполнения кода:
{"string":"hello","integer":1}
Смотрите также
-
класс
Response,
который формирует базовый HTTP-ответ -
метод
setData,
который задаёт данные для JSON-ответа -
метод
setEncodingOptions,
который задаёт опции кодирования JSON -
метод
fromJsonString,
который создаёт ответ из строки JSON