Como você aprendeu na seção anterior, em cada requisição HTTP, o Zend\Mvc\Application
objeto é criado. Normalmente, um aplicativo "vive" por um segundo ou menos
(esse tempo é suficiente para gerar a resposta HTTP). A "vida" da aplicação consiste em várias etapas.
Zend Framework 3 usa o conceito de eventos. Uma classe pode desencadear um evento, e outras classes podem escutar (listen) esse eventos. Tecnicamente, desencadear um evento significa apenas chamar outro método de "callback" de classe. O gerenciamento de eventos é implementado dentro de o componente
Zend\EventManager
.
Cada estágio da vida da aplicação é iniciando é pelo aplicativo, disparando um evento
(este evento é representado pela classe MvcEvent
que está no namespace Zend\Mvc
). Outras
classes (pertencentes ao Zend Framework ou específicas da sua aplicação) podem
aos eventos e reagir de acordo.
Abaixo, os cinco principais eventos (etapas) são apresentados:
Bootstrap . Quando esse evento é acionado pela sua aplicação, um módulo tem a chance de
registre-se como usar o listener (ouvir) de eventos de aplicativos adicionais em seu onBootstrap()
método de retorno de chamada.
Rota. Quando esse evento é acionado, a URL da solicitação é analisado usando uma classe router
(normalmente, com a classe Zend\Router\Http\TreeRouteStack
). Se uma correspondência exata entre o URL e uma rota
for encontrado, o pedido é passado para o controller específica do local atribuída à rota.
Despacho (Dispatch). A classe do controller "despacha" a solicitação usando o método de ação correspondente e produz os dados que podem ser exibidos na página.
Render. Neste evento, os dados produzidos pela ação do controller são passados para serem renderizados pela
Classe Zend\View\Renderer\PhpRenderer
. A classe do renderizador usa um
view template para produzir uma página HTML.
Termino. Neste evento, a resposta HTTP é enviada de volta ao cliente.
O fluxo de eventos é ilustrado na imagem 3.3:
Embora raramente necessário, alguns exemplos práticos de como ouvir (listen) e reagir a um evento pode ser encontrado no capítulo Criando um novo Módulo