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

Метод push класса RequestStack

Метод push класса RequestStack добавляет объект Request в вершину стека запросов. Первым параметром передаётся объект запроса, который нужно поместить в стек. После вызова метода этот запрос становится текущим и доступен через метод getCurrentRequest. Метод ничего не возвращает.

Класс RequestStack хранит все запросы, обрабатываемые в течение жизненного цикла приложения. Когда Symfony обрабатывает вложенный запрос (например, через HttpKernel::handle внутри контроллера), новый запрос помещается в стек методом push, а после обработки извлекается методом pop.

Синтаксис

$requestStack->push($request);

Пример

Давайте создадим стек запросов и добавим в него новый объект Request:

<?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(); return new Response($current->getPathInfo()); } } ?>

Результат выполнения кода для адреса /article:

"/user"

Пример

Давайте добавим два запроса в стек и проверим, какой из них является текущим:

<?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 { $first = Request::create('/hello'); $second = Request::create('/abcde'); $requestStack->push($first); $requestStack->push($second); $current = $requestStack->getCurrentRequest(); return new Response($current->getPathInfo()); } } ?>

Результат выполнения кода для адреса /article:

"/abcde"

Пример

Давайте используем метод 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 { $custom = Request::create('/user?name=abcde'); $requestStack->push($custom); $current = $requestStack->getCurrentRequest(); $name = $current->query->get('name'); return new Response($name); } } ?>

Результат выполнения кода для адреса /article:

"abcde"

Смотрите также

  • класс RequestStack,
    который хранит стек запросов
  • метод getCurrentRequest,
    который возвращает текущий запрос
  • метод getMainRequest,
    который возвращает главный запрос
  • метод pop,
    который извлекает запрос из вершины стека
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить