РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
213 of 1361 menu

Класс 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 запроса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить