Zend_Controller-Basics.xml 8.8 KB

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