Метод getCurrentRequest
Метод getCurrentRequest класса
RequestStack возвращает объект
Request, который находится на вершине стека
запросов. В обычном HTTP-запросе это главный
запрос приложения. Если запросы вложены друг в
друга, метод вернёт последний добавленный
запрос через push. Метод не принимает
параметров и может вернуть null, если
стек пуст.
Синтаксис
public function getCurrentRequest(): ?Request
Пример
Давайте получим текущий запрос в контроллере
через сервис RequestStack:
<?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('/article', name: 'article_index')]
public function index(RequestStack $requestStack): Response
{
$request = $requestStack->getCurrentRequest();
return new Response($request->getPathInfo());
}
}
?>
Результат выполнения кода для адреса
/article:
"/article"
Пример
Давайте проверим, что метод возвращает
null, если стек запросов пуст:
<?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('/article/empty', name: 'article_empty')]
public function empty(RequestStack $requestStack): Response
{
$requestStack->pop();
$request = $requestStack->getCurrentRequest();
if ($request === null) {
return new Response('stack is empty');
}
return new Response('stack is not empty');
}
}
?>
Результат выполнения кода:
"stack is empty"
Пример
Давайте используем метод для получения
заголовка User-Agent текущего запроса:
<?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('/article/agent', name: 'article_agent')]
public function agent(RequestStack $requestStack): Response
{
$request = $requestStack->getCurrentRequest();
$agent = $request->headers->get('User-Agent');
return new Response($agent);
}
}
?>
Результат выполнения кода:
"Mozilla/5.0"
Смотрите также
-
класс
RequestStack,
который хранит стек HTTP-запросов -
метод
getMainRequest,
который возвращает главный запрос приложения -
метод
push,
который добавляет запрос в стек -
метод
pop,
который извлекает последний запрос из стека