Життя запиту

Життя запиту

У Magento запит проходить FrontController, список роутерів і execute() дії. У Symfony HttpKernel виконує той самий шлях, але кожен крок — це подія, на яку може підписатися будь-хто: роутинг, безпека, конвертація аргументів, обробка винятків. Зрозумійте цю схему, і більшість «магії» Symfony стане звичайними слухачами подій.

flowchart TD
  A["public/index.php"] --> B["Kernel::handle(Request)"]
  B --> C{{"kernel.request"}}
  C -->|"RouterListener знаходить маршрут"| C2["Firewall: хто користувач"]
  C2 --> D{{"kernel.controller"}}
  D --> E["ArgumentResolver: Request, сутності, DTO"]
  E --> F["Контролер"]
  F -->|"повернув Response"| H{{"kernel.response"}}
  F -->|"повернув не Response"| G{{"kernel.view"}}
  G --> H
  H --> I["Response::send()"]
  I --> J{{"kernel.terminate"}}
  F -. "виняток" .-> X{{"kernel.exception"}}
  X --> H
Крок Symfony Найближче в Magento Що там відбувається
public/index.php, Kernel pub/index.php, Bootstrap, App\Http::launch() Завантаження скомпільованого контейнера.
kernel.request: RouterListener (пріоритет 32) FrontController::dispatch(), RouterList::match() Маршрут записується в атрибути Request.
kernel.request: Firewall (пріоритет 8) area + сесія, плагін автентифікації адмінки Автентифікація, токен користувача.
kernel.controller controller_action_predispatch, плагіни на dispatch() Тут спрацьовують #[IsGranted], #[Cache].
ArgumentResolver немає; getParam() вручну Сутність за id, DTO з JSON, поточний користувач.
Контролер ActionInterface::execute() Ваш код.
kernel.view немає Перетворення не-Response на Response, наприклад #[Template].
kernel.response controller_front_send_response_before Заголовки, cookies, Web Profiler toolbar.
kernel.terminate немає Робота після відправки відповіді: логи, листи.
kernel.exception ExceptionHandler, noroute 404/403/500, сторінки помилок.

Подивитися всіх слухачів і їхні пріоритети: bin/console debug:event-dispatcher kernel.request.