Метод getMainRequest
Метод getMainRequest класса RequestStack
возвращает главный запрос из стека запросов.
Главным считается самый первый запрос, который был
помещён в стек. Он остаётся неизменным на протяжении
всего жизненного цикла приложения и не заменяется
при обработке вложенных запросов, например при
использовании forward или subrequest.
Метод не принимает параметров и возвращает объект
Request или null, если стек пуст.
Синтаксис
public function getMainRequest(): ?Request
Пример
Давайте получим главный запрос в контроллере и выведем его метод:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/', name: 'article_index')]
public function index(RequestStack $requestStack): Response
{
$mainRequest = $requestStack->getMainRequest();
return new Response($mainRequest->getMethod());
}
}
?>
Результат выполнения кода:
"GET"
Пример
Давайте убедимся, что при вложенном запросе главный запрос не меняется. Сначала получим главный запрос, затем текущий:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/user', name: 'article_user')]
public function user(RequestStack $requestStack): Response
{
$mainRequest = $requestStack->getMainRequest();
$currentRequest = $requestStack->getCurrentRequest();
$res = [
$mainRequest->getPathInfo(),
$currentRequest->getPathInfo(),
];
return new Response(implode(', ', $res));
}
}
?>
Результат выполнения кода для адреса /user:
"/user, /user"
Поскольку вложенных запросов нет, главный и текущий запросы совпадают.
Смотрите также
-
класс
Request,
который представляет HTTP-запрос -
класс
RequestStack,
который хранит стек запросов -
метод
getCurrentRequest,
который возвращает текущий запрос -
метод
push,
который добавляет запрос в стек