index.php
создает экземпляр приложения ( \Magento\Framework\App\Http
) с помощью objectManager (который создается до этого в начальной загрузке) и вызывает метод launch
.
Экземпляр Http-приложения выполняет начальную маршрутизацию: для определения области, которая должна быть загружена, требуется первая часть URL (admin / frontend / rest / ...).
Когда область определена, конфигурация для этой области загружается (в отличие от Magento 1, где была загружена вся конфигурация).
Затем объект приложения вызывает Magento\Framework\App\FrontControllerInterface::dispatch
запрашиваемую область. Front Controller выполняет маршрутизацию так же, как в Magento 1: все маршрутизаторы повторяются для соответствия запросу. Маршрутизатор, который соответствует запросу, возвращает экземпляр ActionController, которому соответствует FrontController
. Этот процесс более эффективен, потому что используются только маршрутизаторы одной области (административный маршрутизатор не используется во внешнем интерфейсе). Все дополнительное поведение было перенесено из переднего контроллера plugins
из FrontController
и контроллеров действий.
Когда FrontController
получает экземпляр контроллера действия, он вызывает dispatch
его. Контроллер действий выполняет свою задачу и возвращает экземпляр некоторой реализации ResultInterface
(например, page, redirect, ...).
FrontController
просто возвращается ResultInterface
к экземпляру приложения, который отображает ответ.
Я сделал презентацию по этому вопросу на Meet Magento NL:
http://www.slideshare.net/Dutchento/anton-kril-mm15nl