index.php
cria instância de aplicação ( \Magento\Framework\App\Http
) usando ObjectManager (que é criado antes que na inicialização) e chama o método launch
.
A instância do aplicativo Http faz o roteamento inicial: é necessária a primeira parte do URL para descobrir qual área deve ser carregada (admin / frontend / rest / ...).
Quando area é definida, a configuração dessa área é carregada (diferente do Magento 1, onde toda a configuração foi carregada).
Em seguida, o objeto de aplicativo chama Magento\Framework\App\FrontControllerInterface::dispatch
da área solicitada. O Front Controller faz o mesmo roteamento do Magento 1: todos os roteadores são iterados para corresponder à solicitação. O roteador que corresponde à solicitação retorna a instância do ActionController correspondente FrontController
. Esse processo é mais eficiente porque somente roteadores de uma área são usados (o roteador de administrador não é usado no front-end). Todo o comportamento extra foi movido do controlador frontal para os controladores plugins
de FrontController
ação e de ação.
Quando FrontController
obtém a instância do controlador de ação, ele chama dispatch
. O controlador de ação executa sua tarefa e retorna a instância de alguma implementação de ResultInterface
(como página, redirecionamento, ...).
FrontController
apenas retorna ResultInterface
à Instância do aplicativo que renderiza a resposta.
Fiz uma apresentação sobre isso no Meet Magento NL:
http://www.slideshare.net/Dutchento/anton-kril-mm15nl