Zend_Controller Básico
O sistema Zend_Controller é projetado para ser leve,
modular, e extensível. É um projeto minimalista para permitir uma
flexibilidade e alguma liberdade para usuários enquanto provê
estrutura suficiente para os sistemas construídos envolta do
Zend_Controller compartilhar algumas convenções
comuns e layout de código.
O diagrama seguinte representa o processo, e a narrativa subseqüente
descreve detalhadamente as interações:
O processo do Zend_Controller é implementado por vários
componentes. Enquanto não é necessário entender completamente
os por menores de todos estes componentes do sistema, ter um
conhecimento básico do processo é útil.
Zend_Controller_Front orquestra todo o
processo do sistema Zend_Controller. Ele
é o interpretador do padrão FrontController.
Zend_Controller_Front processa todas as
requisições recebidas pelo servidor e é o responsável
direto pela delegação dos pedidos dos ActionControllers
(Zend_Controller_Action).
Zend_Controller_Request_Abstract (muitas
vezes chamado de Request Object) representa
o ambiente de pedido e fornece métodos para colocação e
recuperação do controlador e nomes de ações e qualquer
parâmetros passados. Adicionalmente ele guarda o
registro de que a ação foi despachada ou não pelo
Zend_Controller_Dispatcher. Extensões
do objeto de requisição abstrata podem ser usadas
para encapsular todo o ambiente de requisição, permitindo
aos roterizadores colocarem informações no ambiente de
requisição para estabelecer o controlador e nomes de ação.
Por padrão, Zend_Controller_Request_Http é
usado, para fornecer acesso a todo o ambiente de pedido
de HTTP.
Zend_Controller_Router_Interface é usado
para definir os roterizadores. Roterização o processo
de examinação da requisição do ambiente para determinar qual
controlador, e ação do controlador, devem receber a
requisição. Este controlador, ação e parâmetros opcionais
são incluídos no objeto de requisição para serem processados
pelo Zend_Controller_Dispatcher_Standard.
Roterização ocorre somente uma vez: quando a requisição é
inicialmente recebida e antes do primeiro controlador ser
despachado.
O roterizador padrão,
Zend_Controller_Router_Rewrite, pega uma URI
no ponto especificado em
Zend_Controller_Request_Http e a decompõe
em um controlador, ação e parâmetros baseado na informação
do caminho da url. Por exemplo, a URL
http://localhost/foo/bar/key/value pode ser
decomposta para usar o controlador foo,
a ação bar, e o parametro especificado
key com o valor igual a value.
Zend_Controller_Router_Rewrite também pode ser
usado para combinar caminhos arbitrários; veja documentação do
roterizador para mais informações.
Zend_Controller_Dispatcher_Interface é usado para
definir despachantes. Despachar é o processo de pegar o
controlador e a ação do objeto de requisição e mapea-lo
para um arquivo/classe de um controlador e método de ação
na classe do controlador. Se o controlador ou ação não
forem informados, ele determina o controlador e ação padrão
para despachar.
O processo atual de despacho consiste em instanciar a classe
do controlador e chamar o método de ação nesta classe.
Diferente da roterização, que ocorre somente uma vez,
o despacho ocorre em um laço. Se o status do objeto de
requisição despachado é reiniciado em algum ponto, o laço
irá se repetir, chamando qualquer ação atualmente
estabelecida no objeto de requisição. A primeira vez que o
laço do objeto de requisição terminar com o status ativado
(verdadeiro boleano), ele irá finalizar o processo.
O despachador padrão é o
Zend_Controller_Dispatcher_Standard. Ele
define os controladores como CamelCasedClasses terminados
com a palavra Controller, e os métodos de ações como
camelCasedMethods terminadas com a palavra Action:
FooController::barAction(). Neste caso, o
controlador será chamado como foo
e a ação como bar.
Zend_Controller_Action é a ação básica
do componente do controlador. Cada controlador é uma
classe única que extende a classe Zend_Controller_Action
e deve conter um ou mais métodos de ação.
Zend_Controller_Response_Abstract define a
classe básica de resposta usada para coletar e retornar
repostas dos controladores de ação. Ela coleta tanto
cabeçalhos como conteúdos de corpo.
A classe de resposta padrão é
Zend_Controller_Response_Http, que é
conveniente para uso em um ambiente HTTP.
O processo do Zend_Controller é relativamente simples.
Uma requisição é recebida pelo Zend_Controller_Front,
que por sua vez chama Zend_Controller_Router_Rewrite
para determinar qual controlador (e ação deste controlador) será
chamado.
Zend_Controller_Router_Rewrite decompõe o URI
para poder determinar os nomes do controlador e da ação da requisição.
Zend_Controller_Front então entrar em um laço de despacho.
Ele chama Zend_Controller_Dispatcher_Standard, passando-lhe
a requisição, para ser despachada para o controlador e ação especificados
na requisição (ou usa os padrões). Depois que o controlador termina,
o controle retorna para Zend_Controller_Front. Se o
controlador indicar outro controlador para ser despachado através
do reinicio do status de requisição, o laço continua e outro despacho
é executado. De outra maneira, o processo termina.