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

Метод isMainRequest класса RequestEvent

Метод isMainRequest класса RequestEvent возвращает true, если событие ядра относится к основному запросу, и false, если запрос вложенный. Основным считается запрос, который пришёл от клиента и был обработан ядром Symfony. Вложенные запросы возникают, когда внутри контроллера выполняется дополнительный запрос через HttpKernelInterface::handle с параметром $catch и флагом HttpKernelInterface::SUB_REQUEST. Параметров метод не принимает.

Синтаксис

public function isMainRequest(): bool

Пример

Давайте создадим слушателя события kernel.request, который выводит в лог тип текущего запроса:

<?php namespace App\EventListener; use Symfony\Component\HttpKernel\Event\RequestEvent; use Psr\Log\LoggerInterface; class RequestListener { private LoggerInterface $logger; public function __construct(LoggerInterface $logger) { $this->logger = $logger; } public function onKernelRequest(RequestEvent $event): void { if ($event->isMainRequest()) { $this->logger->info('main request'); } else { $this->logger->info('sub request'); } } } ?>

Регистрируем слушателя в конфигурации сервисов:

services: App\EventListener\RequestListener: tags: - { name: kernel.event_listener, event: kernel.request }

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

"main request"

Пример

Давайте выполним вложенный запрос внутри контроллера и проверим, как отработает метод isMainRequest:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] public function index(HttpKernelInterface $kernel): Response { $subRequest = Request::create('/article/inner'); $response = $kernel->handle($subRequest, HttpKernelInterface::SUB_REQUEST); return new Response('outer: ' . $response->getContent()); } #[Route('/article/inner', name: 'article_inner')] public function inner(): Response { return new Response('inner'); } } ?>

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

"outer: inner"

При этом слушатель из первого примера для внешнего запроса выведет "main request", а для вложенного - "sub request".

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

  • класс RequestEvent,
    который представляет событие ядра с запросом
  • метод getRequest,
    который возвращает объект запроса из события
  • метод setResponse,
    который устанавливает ответ в событии
  • событие RequestEvent,
    которое срабатывает при обработке запроса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить