Zend_Controller-Basics.xml 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.controller.basics">
  5. <title>O Básico de Zend_Controller</title>
  6. <para>
  7. O sistema <classname>Zend_Controller</classname> é projetado para ser leve, modular, e
  8. extensível. É um projeto minimalista para permitir uma flexibilidade e alguma liberdade
  9. para usuários enquanto provê estrutura suficiente para os sistemas construídos envolta
  10. do <classname>Zend_Controller</classname> compartilhar algumas convenções
  11. comuns e layout de código.
  12. </para>
  13. <para>
  14. O diagrama seguinte representa o processo, e a narrativa subseqüente descreve
  15. detalhadamente as interações:
  16. </para>
  17. <para>
  18. <inlinegraphic width="483" scale="100" align="center" valign="middle"
  19. fileref="figures/zend.controller.basics.png" format="PNG" />
  20. </para>
  21. <para>
  22. O processo do <classname>Zend_Controller</classname> é implementado por vários
  23. componentes. Enquanto não é necessário entender completamente os por menores de todos
  24. estes componentes do sistema, ter um conhecimento básico do processo é útil.
  25. </para>
  26. <itemizedlist>
  27. <listitem>
  28. <para>
  29. <classname>Zend_Controller_Front</classname> orquestra todo o processo do
  30. sistema <classname>Zend_Controller</classname>. Ele é o interpretador do
  31. padrão FrontController. <classname>Zend_Controller_Front</classname> processa
  32. todas as requisições recebidas pelo servidor e é o responsável direto pela
  33. delegação dos pedidos dos ActionControllers
  34. (<classname>Zend_Controller_Action</classname>).
  35. </para>
  36. </listitem>
  37. <listitem>
  38. <para>
  39. <classname>Zend_Controller_Request_Abstract</classname> (muitas vezes chamado
  40. de <emphasis>Request Object</emphasis>) representa o ambiente de pedido e
  41. fornece métodos para colocação e recuperação do controlador e nomes de ações
  42. e qualquer parâmetros passados. Adicionalmente ele guarda o registro de que a
  43. ação foi despachada ou não pelo
  44. <classname>Zend_Controller_Dispatcher</classname>. Extensões do objeto de
  45. requisição abstrata podem ser usadas para encapsular todo o ambiente de
  46. requisição, permitindo aos roteadores colocarem informações no ambiente de
  47. requisição para estabelecer o controlador e nomes de ação.
  48. </para>
  49. <para>
  50. Por padrão, <classname>Zend_Controller_Request_Http</classname> é usado, para
  51. fornecer acesso a todo o ambiente de pedido de <acronym>HTTP</acronym>.
  52. </para>
  53. </listitem>
  54. <listitem>
  55. <para>
  56. <classname>Zend_Controller_Router_Interface</classname> é usado para definir
  57. os roteadores. Roteamento é o processo de examinação da requisição do ambiente
  58. para determinar qual controlador e ação do controlador, devem receber a
  59. requisição. Este controlador, ação e parâmetros opcionais são incluídos no
  60. objeto de requisição para serem processados pelo
  61. <classname>Zend_Controller_Dispatcher_Standard</classname>. O roteamento
  62. ocorre somente uma vez: quando a requisição é inicialmente recebida e antes
  63. do primeiro controlador ser despachado.
  64. </para>
  65. <para>
  66. O roteador padrão, <classname>Zend_Controller_Router_Rewrite</classname>, pega
  67. uma <acronym>URI</acronym> no ponto especificado em
  68. <classname>Zend_Controller_Request_Http</classname> e a decompõe em um
  69. controlador, ação e parâmetros baseado na informação do caminho da
  70. <acronym>URL</acronym>. Por exemplo, a <acronym>URL</acronym>
  71. <filename>http://localhost/foo/bar/key/value</filename> pode ser decomposta
  72. para usar o controlador <emphasis>foo</emphasis>, a ação
  73. <emphasis>bar</emphasis>, e o parâmetro especificado <emphasis>key</emphasis>
  74. com o valor igual a <emphasis>value</emphasis>.
  75. </para>
  76. <para>
  77. <classname>Zend_Controller_Router_Rewrite</classname> também pode ser usado
  78. para combinar caminhos arbitrários; veja a <link
  79. linkend="zend.controller.router">documentação do roteador</link>
  80. para mais informações.
  81. </para>
  82. </listitem>
  83. <listitem>
  84. <para>
  85. <classname>Zend_Controller_Dispatcher_Interface</classname> é usado para
  86. definir despachantes. Despachar é o processo de pegar o controlador e a ação
  87. do objeto de requisição e mapeá-lo para um arquivo de um controlador (ou
  88. classe) e método de ação na classe do controlador. Se o controlador ou ação
  89. não existir, ele determina o controlador e ação padrão para despachar.
  90. </para>
  91. <para>
  92. O processo atual de despacho consiste em instanciar a classe do controlador e
  93. chamar o método de ação nesta classe. Diferente do roteamento, que ocorre
  94. somente uma vez, o despacho ocorre em um laço. Se o status do objeto de
  95. requisição despachado é reiniciado em algum ponto, o laço irá se repetir,
  96. chamando qualquer ação atualmente estabelecida no objeto de requisição. A
  97. primeira vez que o laço do objeto de requisição terminar com o status ativado
  98. (<type>Boolean</type> <constant>TRUE</constant>), ele irá finalizar
  99. o processo.
  100. </para>
  101. <para>
  102. O despachador padrão é o
  103. <classname>Zend_Controller_Dispatcher_Standard</classname>. Ele define os
  104. controladores como MixedCasedClasses terminados com a palavra Controller, e os
  105. métodos de ações como camelCasedMethods terminadas com a palavra Action:
  106. <methodname>FooController::barAction()</methodname>. Neste caso, o controlador
  107. será chamado como <emphasis>foo</emphasis> e a ação como
  108. <emphasis>bar</emphasis>.
  109. </para>
  110. <note>
  111. <title>Convenções de Nomenclatura para Maiúsculas e Minúsculas</title>
  112. <para>
  113. Desde que os seres humanos são notoriamente incapazes de preservar
  114. maiúsculas e minúsculas ao digitar links, o Zend Framework atualmente
  115. normaliza as informações sobre o caminho para minúsculas. Isto,
  116. naturalmente, afetará a forma como você nomeia o seu controlador e suas
  117. ações... ou referir-se a eles em links.
  118. </para>
  119. <para>
  120. Se você deseja que o nome de seu controlador de classe ou do método de ação
  121. tenham múltiplas MixedCasedWords ou camelCasedWords, você precisará, para
  122. separar as palavras na url, um '-' ou '.' (embora você pode configurar o
  123. caractere utilizado).
  124. </para>
  125. <para>
  126. Por exemplo, se você estava indo para a ação em
  127. <methodname>FooBarController::bazBatAction()</methodname>, você irá se
  128. referir a ela em uma url como <filename>/foo-bar/baz-bat</filename> ou
  129. <filename>/foo.bar/baz.bat</filename>.
  130. </para>
  131. </note>
  132. </listitem>
  133. <listitem>
  134. <para>
  135. <classname>Zend_Controller_Action</classname> é o componente base do
  136. controlador de ação. Cada controlador é uma classe única que extende a classe
  137. <classname>Zend_Controller_Action</classname> e deve conter um ou
  138. mais métodos de ação.
  139. </para>
  140. </listitem>
  141. <listitem>
  142. <para>
  143. <classname>Zend_Controller_Response_Abstract</classname> define a classe básica
  144. de resposta usada para coletar e retornar repostas dos controladores de ação.
  145. Ela coleta tanto cabeçalhos como conteúdos de corpo.
  146. </para>
  147. <para>
  148. A classe de resposta padrão é
  149. <classname>Zend_Controller_Response_Http</classname>, que é conveniente para
  150. uso em um ambiente <acronym>HTTP</acronym>.
  151. </para>
  152. </listitem>
  153. </itemizedlist>
  154. <para>
  155. O processo do <classname>Zend_Controller</classname> é relativamente simples. Uma
  156. requisição é recebida pelo <classname>Zend_Controller_Front</classname>, que por sua vez
  157. chama <classname>Zend_Controller_Router_Rewrite</classname> para determinar qual
  158. controlador (e ação deste controlador) será chamado.
  159. <classname>Zend_Controller_Router_Rewrite</classname> decompõe o <acronym>URI</acronym>
  160. para poder determinar os nomes do controlador e da ação da requisição.
  161. <classname>Zend_Controller_Front</classname> então entrar em um laço de despacho. Ele
  162. chama <classname>Zend_Controller_Dispatcher_Standard</classname>, passando-lhe a
  163. requisição, para ser despachada para o controlador e ação especificados na requisição (ou
  164. usa os padrões). Depois que o controlador termina, o controle retorna para
  165. <classname>Zend_Controller_Front</classname>. Se o controlador indicar outro controlador
  166. para ser despachado através do reinicio do status de requisição, o laço continua e outro
  167. despacho é executado. De outra maneira, o processo termina.
  168. </para>
  169. </sect1>
  170. <!--
  171. vim:se ts=4 sw=4 et:
  172. -->