| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.controller.basics">
- <title>O Básico de Zend_Controller</title>
- <para>
- O sistema <classname>Zend_Controller</classname> é 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 <classname>Zend_Controller</classname> compartilhar algumas convenções
- comuns e layout de código.
- </para>
- <para>
- O diagrama seguinte representa o processo, e a narrativa subseqüente descreve
- detalhadamente as interações:
- </para>
- <para>
- <inlinegraphic width="483" scale="100" align="center" valign="middle"
- fileref="figures/zend.controller.basics.png" format="PNG" />
- </para>
- <para>
- O processo do <classname>Zend_Controller</classname> é 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.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <classname>Zend_Controller_Front</classname> orquestra todo o processo do
- sistema <classname>Zend_Controller</classname>. Ele é o interpretador do
- padrão FrontController. <classname>Zend_Controller_Front</classname> processa
- todas as requisições recebidas pelo servidor e é o responsável direto pela
- delegação dos pedidos dos ActionControllers
- (<classname>Zend_Controller_Action</classname>).
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Request_Abstract</classname> (muitas vezes chamado
- de <emphasis>Request Object</emphasis>) 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
- <classname>Zend_Controller_Dispatcher</classname>. Extensões do objeto de
- requisição abstrata podem ser usadas para encapsular todo o ambiente de
- requisição, permitindo aos roteadores colocarem informações no ambiente de
- requisição para estabelecer o controlador e nomes de ação.
- </para>
- <para>
- Por padrão, <classname>Zend_Controller_Request_Http</classname> é usado, para
- fornecer acesso a todo o ambiente de pedido de <acronym>HTTP</acronym>.
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Router_Interface</classname> é usado para definir
- os roteadores. Roteamento é 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
- <classname>Zend_Controller_Dispatcher_Standard</classname>. O roteamento
- ocorre somente uma vez: quando a requisição é inicialmente recebida e antes
- do primeiro controlador ser despachado.
- </para>
- <para>
- O roteador padrão, <classname>Zend_Controller_Router_Rewrite</classname>, pega
- uma <acronym>URI</acronym> no ponto especificado em
- <classname>Zend_Controller_Request_Http</classname> e a decompõe em um
- controlador, ação e parâmetros baseado na informação do caminho da
- <acronym>URL</acronym>. Por exemplo, a <acronym>URL</acronym>
- <filename>http://localhost/foo/bar/key/value</filename> pode ser decomposta
- para usar o controlador <emphasis>foo</emphasis>, a ação
- <emphasis>bar</emphasis>, e o parâmetro especificado <emphasis>key</emphasis>
- com o valor igual a <emphasis>value</emphasis>.
- </para>
- <para>
- <classname>Zend_Controller_Router_Rewrite</classname> também pode ser usado
- para combinar caminhos arbitrários; veja a <link
- linkend="zend.controller.router">documentação do roteador</link>
- para mais informações.
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Dispatcher_Interface</classname> é usado para
- definir despachantes. Despachar é o processo de pegar o controlador e a ação
- do objeto de requisição e mapeá-lo para um arquivo de um controlador (ou
- classe) e método de ação na classe do controlador. Se o controlador ou ação
- não existir, ele determina o controlador e ação padrão para despachar.
- </para>
- <para>
- O processo atual de despacho consiste em instanciar a classe do controlador e
- chamar o método de ação nesta classe. Diferente do roteamento, 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
- (<type>Boolean</type> <constant>TRUE</constant>), ele irá finalizar
- o processo.
- </para>
- <para>
- O despachador padrão é o
- <classname>Zend_Controller_Dispatcher_Standard</classname>. Ele define os
- controladores como MixedCasedClasses terminados com a palavra Controller, e os
- métodos de ações como camelCasedMethods terminadas com a palavra Action:
- <methodname>FooController::barAction()</methodname>. Neste caso, o controlador
- será chamado como <emphasis>foo</emphasis> e a ação como
- <emphasis>bar</emphasis>.
- </para>
- <note>
- <title>Convenções de Nomenclatura para Maiúsculas e Minúsculas</title>
- <para>
- Desde que os seres humanos são notoriamente incapazes de preservar
- maiúsculas e minúsculas ao digitar links, o Zend Framework atualmente
- normaliza as informações sobre o caminho para minúsculas. Isto,
- naturalmente, afetará a forma como você nomeia o seu controlador e suas
- ações... ou referir-se a eles em links.
- </para>
- <para>
- Se você deseja que o nome de seu controlador de classe ou do método de ação
- tenham múltiplas MixedCasedWords ou camelCasedWords, você precisará, para
- separar as palavras na url, um '-' ou '.' (embora você pode configurar o
- caractere utilizado).
- </para>
- <para>
- Por exemplo, se você estava indo para a ação em
- <methodname>FooBarController::bazBatAction()</methodname>, você irá se
- referir a ela em uma url como <filename>/foo-bar/baz-bat</filename> ou
- <filename>/foo.bar/baz.bat</filename>.
- </para>
- </note>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Action</classname> é o componente base do
- controlador de ação. Cada controlador é uma classe única que extende a classe
- <classname>Zend_Controller_Action</classname> e deve conter um ou
- mais métodos de ação.
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Response_Abstract</classname> 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.
- </para>
- <para>
- A classe de resposta padrão é
- <classname>Zend_Controller_Response_Http</classname>, que é conveniente para
- uso em um ambiente <acronym>HTTP</acronym>.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- O processo do <classname>Zend_Controller</classname> é relativamente simples. Uma
- requisição é recebida pelo <classname>Zend_Controller_Front</classname>, que por sua vez
- chama <classname>Zend_Controller_Router_Rewrite</classname> para determinar qual
- controlador (e ação deste controlador) será chamado.
- <classname>Zend_Controller_Router_Rewrite</classname> decompõe o <acronym>URI</acronym>
- para poder determinar os nomes do controlador e da ação da requisição.
- <classname>Zend_Controller_Front</classname> então entrar em um laço de despacho. Ele
- chama <classname>Zend_Controller_Dispatcher_Standard</classname>, 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
- <classname>Zend_Controller_Front</classname>. 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.
- </para>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|