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