9.1 Что такое подзапросы
Подзапросы выглядят и работают подобно остальным запросам, но обычно служат для обработки небольшой части страницы, вместо всей страницы целиком.
Методу HttpKernel::handle() передаётся специальный аргумент $type:
// \Symfony\Component\HttpKernel\HttpKernel.php
public function handle( Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
{
…
}
Существуют две константы в интерфейсе HttpKernelInterface:
- MASTER_REQUEST - основной запрос
- SUB_REQUEST - подзапрос
Для каждого запроса вашего приложение, первый запрос который обрабатывается ядром Symfony - это MASTER_REQUEST. Это задаётся неявно, так как аргумент $type не передаётся методу handle() во фронт-контроллерах.
Многие слушатели событий выполняются только для запросов типа MASTER_REQUEST. Для этог используется специальный метод Kernel:Event:isMasterRequest() Например компонент Firewall ничего не делает, если это подзапрос:
public function onKernelRequest(GetResponseEvent $event)
{
if (!$event->isMasterRequest()) {
return;
}
...
}