index.php
crea una instancia de aplicación ( \Magento\Framework\App\Http
) usando objectManager (que se creó antes que eso en bootstrap) y llama al método launch
.
La instancia de la aplicación HTTP realiza el enrutamiento inicial: se necesita la primera parte de la url para determinar qué área se debe cargar (admin / frontend / rest / ...).
Cuando se define el área, se carga la configuración de esa área (a diferencia de Magento 1, donde se cargó toda la configuración).
Luego, el objeto de la aplicación llama al Magento\Framework\App\FrontControllerInterface::dispatch
área solicitada. El controlador frontal realiza el enrutamiento igual que en Magento 1: todos los enrutadores se repiten para que coincidan con la solicitud. El enrutador que coincide con la solicitud devuelve la instancia de ActionController coincidente FrontController
. Este proceso es más eficiente porque solo se usan enrutadores de un área (el enrutador de administrador no se usa en la interfaz). Todo el comportamiento adicional se movió del controlador frontal a los controladores plugins
de FrontController
acción.
Cuando FrontController
obtiene la instancia del controlador de acción, lo llama dispatch
. El controlador de acción realiza su tarea y devuelve una instancia de alguna implementación de ResultInterface
(como página, redireccionar, ...).
FrontController
simplemente vuelve ResultInterface
a la instancia de aplicación que muestra la respuesta.
Hice una presentación sobre esto en Meet Magento NL:
http://www.slideshare.net/Dutchento/anton-kril-mm15nl