Класс Response
Класс Response представляет собой HTTP-ответ
и является центральным объектом при работе с ответами
в Symfony. Любой контроллер обязан вернуть объект
этого класса или его наследника. Первым параметром
в конструктор передаётся содержимое ответа, вторым -
статус-код, третьим - массив заголовков.
Синтаксис
new Response(content, status, headers)
Пример
Давайте создадим простой ответ с текстом 'hello':
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/', name: 'article_index')]
public function index(): Response
{
return new Response('hello');
}
}
?>
Результат выполнения кода:
hello
Пример
Давайте передадим статус-код 404 и заголовок
Content-Type:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/user', name: 'article_user')]
public function user(): Response
{
return new Response(
'article',
Response::HTTP_NOT_FOUND,
['Content-Type' => 'text/plain']
);
}
}
?>
Результат выполнения кода:
"article"
Пример
Давайте изменим содержимое и статус-код уже
созданного ответа с помощью методов setContent
и setStatusCode:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/page', name: 'article_page')]
public function page(): Response
{
$res = new Response();
$res->setContent('abcde');
$res->setStatusCode(Response::HTTP_OK);
return $res;
}
}
?>
Результат выполнения кода:
"abcde"
Пример
Давайте создадим ответ в формате JSON с помощью
наследника JsonResponse:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/data', name: 'article_data')]
public function data(): JsonResponse
{
return new JsonResponse([
'id' => 1,
'title' => 'article',
'active' => true,
]);
}
}
?>
Результат выполнения кода:
{"id":1,"title":"article","active":true}
Смотрите также
-
метод
setContent,
который задаёт содержимое ответа -
метод
setStatusCode,
который задаёт статус-код ответа -
класс
JsonResponse,
который возвращает ответ в формате JSON -
класс
RedirectResponse,
который выполняет перенаправление на другой URL