Класс RequestStack
Класс RequestStack представляет собой стек HTTP-запросов.
Он позволяет получать доступ к текущему запросу, главному запросу,
а также управлять стеком при помощи методов push и pop.
Чаще всего используется для доступа к запросу вне контроллера,
например, в сервисах или слушателях событий.
Синтаксис
use Symfony\Component\HttpFoundation\RequestStack;
$requestStack = new RequestStack();
$requestStack->push($request);
$currentRequest = $requestStack->getCurrentRequest();
$mainRequest = $requestStack->getMainRequest();
$requestStack->pop();
Пример
Давайте внедрим RequestStack в сервис и получим текущий запрос:
<?php
namespace App\Service;
use Symfony\Component\HttpFoundation\RequestStack;
class RequestService
{
private RequestStack $requestStack;
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
public function getCurrentUri(): string
{
$request = $this->requestStack->getCurrentRequest();
if ($request === null) {
return 'no request';
}
return $request->getRequestUri();
}
}
?>
Результат выполнения кода для адреса /article:
"/article"
Пример
Давайте вручную добавим запрос в стек при помощи метода push:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
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 = Request::create('/user');
$requestStack->push($request);
$current = $requestStack->getCurrentRequest();
$uri = $current->getRequestUri();
$requestStack->pop();
return new Response($uri);
}
}
?>
Результат выполнения кода:
"/user"
Пример
Давайте получим главный запрос при помощи метода getMainRequest:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
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
{
$main = Request::create('/main');
$sub = Request::create('/sub');
$requestStack->push($main);
$requestStack->push($sub);
$mainUri = $requestStack->getMainRequest()->getRequestUri();
$requestStack->pop();
$requestStack->pop();
return new Response($mainUri);
}
}
?>
Результат выполнения кода:
"/main"
Смотрите также
-
класс
Request,
который представляет HTTP-запрос -
метод
getCurrentRequest,
который возвращает текущий запрос -
метод
getMainRequest,
который возвращает главный запрос -
метод
getRequestUri,
который возвращает URI запроса