Метод json
Метод json класса AbstractController формирует объект JsonResponse из переданных данных. Первым параметром передаются данные для сериализации в JSON. Вторым параметром можно указать HTTP-статус ответа. Третьим - массив заголовков. Четвёртым - контекст сериализации. Метод удобен, когда нужно вернуть JSON без ручного создания JsonResponse.
Синтаксис
$this->json(data, status: 200, headers: [], context: [])
Пример
Давайте вернём простой массив в формате JSON:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationJsonResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/json', name: 'article_json')]
public function json(): JsonResponse
{
return $this->json(['a', 'b', 'c', 'd', 'e']);
}
}
?>
Результат выполнения кода:
["a","b","c","d","e"]
Пример
Давайте вернём ассоциативный массив с данными статьи:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationJsonResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/show', name: 'article_show')]
public function show(): JsonResponse
{
return $this->json([
'id' => 1,
'name' => 'abcde',
'text' => 'article',
'active' => true,
]);
}
}
?>
Результат выполнения кода:
{"id":1,"name":"abcde","text":"article","active":true}
Пример
Давайте укажем HTTP-статус ответа вторым параметром:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationJsonResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/created', name: 'article_created')]
public function created(): JsonResponse
{
return $this->json(['status' => 'hello'], 201);
}
}
?>
Результат выполнения кода:
{"status":"hello"}
Пример
Давайте добавим собственный заголовок к ответу:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationJsonResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/header', name: 'article_header')]
public function header(): JsonResponse
{
return $this->json(
['user' => 'abcde'],
200,
['X-Custom' => 'hello']
);
}
}
?>
Результат выполнения кода:
{"user":"abcde"}
Смотрите также
-
класс
AbstractController,
который предоставляет базовые методы контроллера -
метод
render,
который рендерит Twig-шаблон -
метод
redirectToRoute,
который выполняет редирект на маршрут -
метод
file,
который возвращает файл в ответе