Symfony 7.4 HttpKernel Component
Overview
The HttpKernel component provides a structured process for converting a Request into a Response using the EventDispatcher component. It is the core of the Symfony framework, orchestrating controller resolution, argument resolution, and a rich event-driven lifecycle.
Quick Reference
Request Lifecycle (in order)
- •
kernel.request(KernelEvents::REQUEST/RequestEvent) -- early return possible - •Controller resolution via
ControllerResolverInterface - •
kernel.controller(KernelEvents::CONTROLLER/ControllerEvent) - •Argument resolution via
ArgumentResolverInterface - •
kernel.controller_arguments(KernelEvents::CONTROLLER_ARGUMENTS/ControllerArgumentsEvent) - •Controller execution
- •
kernel.view(KernelEvents::VIEW/ViewEvent) -- only if controller did not return a Response - •
kernel.response(KernelEvents::RESPONSE/ResponseEvent) - •
kernel.finish_request(KernelEvents::FINISH_REQUEST/FinishRequestEvent) - •
kernel.terminate(KernelEvents::TERMINATE/TerminateEvent) -- after response is sent
Exception at any point triggers kernel.exception (KernelEvents::EXCEPTION / ExceptionEvent).
Core Interfaces
| Interface | Purpose |
|---|---|
HttpKernelInterface | handle(Request, type, catch): Response |
KernelInterface | Boot, bundles, container, environment |
TerminableInterface | terminate(Request, Response) |
RebootableInterface | reboot(?cacheDir) |
ControllerResolverInterface | getController(Request): callable|false |
ArgumentResolverInterface | getArguments(Request, callable): array |
ValueResolverInterface | Custom argument value resolution |
Request Types
HttpKernelInterface::MAIN_REQUEST // Main browser request HttpKernelInterface::SUB_REQUEST // Internal sub-request (e.g. ESI, fragment)
Sub-Requests
$subRequest = new Request();
$subRequest->attributes->set('_controller', 'App\\Controller\\FooController::bar');
$response = $kernel->handle($subRequest, HttpKernelInterface::SUB_REQUEST);
Check request type in listeners: $event->isMainRequest().
Creating an Event Listener
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
public function onKernelRequest(RequestEvent $event): void
{
if (!$event->isMainRequest()) {
return;
}
// ...
}
Full Documentation
- •Official docs: https://symfony.com/doc/7.4/components/http_kernel.html
- •GitHub: https://github.com/symfony/http-kernel
- •KernelEvents constants:
Symfony\Component\HttpKernel\KernelEvents
Full Documentation
See references/http-kernel.md for complete documentation including all events, classes, interfaces, and usage examples.