Метод pop
Метод pop класса RequestStack удаляет
последний (текущий) запрос из стека и возвращает
его. Если стек пуст, метод возвращает null.
Метод не принимает параметров. Обычно используется
для восстановления предыдущего запроса после
завершения работы с вложенным запросом.
Синтаксис
public function pop(): ?Request
Пример
Давайте создадим стек, добавим в него два запроса
и извлечём последний с помощью метода pop:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationRequestStack;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
$stack = new RequestStack();
$request1 = new Request();
$request1->attributes->set('name', 'first');
$request2 = new Request();
$request2->attributes->set('name', 'second');
$stack->push($request1);
$stack->push($request2);
$popped = $stack->pop();
return new Response($popped->attributes->get('name'));
}
}
?>
Результат выполнения кода:
"second"
Пример
Давайте извлечём запрос из пустого стека и
убедимся, что метод возвращает null:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequestStack;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
$stack = new RequestStack();
$popped = $stack->pop();
if ($popped === null) {
return new Response('stack is empty');
}
return new Response('stack is not empty');
}
}
?>
Результат выполнения кода:
"stack is empty"
Пример
Давайте получим основной и текущий запросы,
а затем вернёмся к основному с помощью метода
pop:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationRequestStack;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(RequestStack $stack): Response
{
$main = $stack->getMainRequest();
$current = $stack->getCurrentRequest();
if ($main === $current) {
return new Response('main equals current');
}
$popped = $stack->pop();
if ($popped === $current) {
return new Response('popped current request');
}
return new Response('popped unknown request');
}
}
?>
Результат выполнения кода для основного запроса:
"main equals current"
Смотрите также
-
класс
RequestStack,
который управляет стеком запросов -
метод
push,
который добавляет запрос в стек -
метод
getCurrentRequest,
который возвращает текущий запрос -
метод
getMainRequest,
который возвращает основной запрос