Zend_Controller-QuickStart.xml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.controller.quickstart">
  5. <title>Guia de Início Rápido do Zend_Controller</title>
  6. <sect2 id="zend.controller.quickstart.introduction">
  7. <title>Introdução</title>
  8. <para>
  9. <classname>Zend_Controller</classname> é o coração do sistema <acronym>MVC</acronym>
  10. do Zend Framework. <acronym>MVC</acronym> significa <ulink
  11. url="http://en.wikipedia.org/wiki/Model-view-controller">Model-View-Controller</ulink>
  12. e é um padrão de projeto voltado para a separação da lógica de aplicação da lógica
  13. de visualização. <classname>Zend_Controller_Front</classname> implementa o padrão
  14. <ulink url="http://www.martinfowler.com/eaaCatalog/frontController.html">Front
  15. Controller</ulink>, no qual todos os pedidos são interceptados pelo controlador
  16. frontal e despachados individualmente para ações baseadas no
  17. <acronym>URL</acronym> requerido.
  18. </para>
  19. <para>
  20. O sistema <classname>Zend_Controller</classname> foi construído com a extensibilidade
  21. em mente, tanto por derivação das classes existentes, como escrevendo novas classes
  22. que implementam as várias interfaces e classes abstratas que formam a fundação da
  23. família de classes controladoras, ou escrevendo plugins ou auxiliadores de ação para
  24. aumentar ou manipular a funcionalidade do sistema.
  25. </para>
  26. </sect2>
  27. <sect2 id="zend.controller.quickstart.go">
  28. <title>Início Rápido</title>
  29. <para>
  30. Se você necessita de informações mais detalhadas, veja as seções seguintes.
  31. Se você quiser apenas começar rápido, continue lendo.
  32. </para>
  33. <sect3 id="zend.controller.quickstart.go.directory">
  34. <title>Criando a Estrutura de Arquivos</title>
  35. <para>
  36. O primeiro passo é criar sua estrutura de arquivos.
  37. A estrutura típica é a seguinte:
  38. </para>
  39. <programlisting language="php"><![CDATA[
  40. application/
  41. controllers/
  42. IndexController.php
  43. models/
  44. views/
  45. scripts/
  46. index/
  47. index.phtml
  48. helpers/
  49. filters/
  50. html/
  51. .htaccess
  52. index.php
  53. ]]></programlisting>
  54. </sect3>
  55. <sect3 id="zend.controller.quickstart.go.docroot">
  56. <title>Estabelecendo seu Documento Raiz</title>
  57. <para>
  58. No seu servidor web, defina seu documento raiz para o diretório
  59. <filename>html/</filename> da estrutura de arquivos acima mencionada.
  60. </para>
  61. </sect3>
  62. <sect3 id="zend.controller.quickstart.go.rewrite">
  63. <title>Criando as Regras de Reescrita</title>
  64. <para>
  65. Edite o arquivo <filename>html/.htaccess</filename> acima para ficar como:
  66. </para>
  67. <programlisting language="php"><![CDATA[
  68. RewriteEngine On
  69. RewriteCond %{REQUEST_FILENAME} -s [OR]
  70. RewriteCond %{REQUEST_FILENAME} -l [OR]
  71. RewriteCond %{REQUEST_FILENAME} -d
  72. RewriteRule ^.*$ - [NC,L]
  73. RewriteRule ^.*$ index.php [NC,L]
  74. ]]></programlisting>
  75. <note>
  76. <title>Saiba mais sobre o mod_rewrite</title>
  77. <para>
  78. As regras de reescrita acima permitem o acesso a qualquer arquivo no documento
  79. raiz de seu host virtual. Se houver arquivos que você não quer expor desta
  80. maneira, você pode ser mais restritivo em suas regras. Vá até o site do Apache
  81. para <ulink
  82. url="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html">aprender mais
  83. sobre o mod_rewrite</ulink>.
  84. </para>
  85. </note>
  86. <para>
  87. Se estiver usando o <acronym>IIS</acronym> 7.0, utilize o seguinte como sua
  88. configuração de reescrita:
  89. </para>
  90. <programlisting language="xml"><![CDATA[
  91. <?xml version="1.0" encoding="UTF-8"?>
  92. <configuration>
  93. <system.webServer>
  94. <rewrite>
  95. <rules>
  96. <rule name="Imported Rule 1" stopProcessing="true">
  97. <match url="^.*$" />
  98. <conditions logicalGrouping="MatchAny">
  99. <add input="{REQUEST_FILENAME}"
  100. matchType="IsFile" pattern=""
  101. ignoreCase="false" />
  102. <add input="{REQUEST_FILENAME}"
  103. matchType="IsDirectory"
  104. pattern="" ignoreCase="false" />
  105. </conditions>
  106. <action type="None" />
  107. </rule>
  108. <rule name="Imported Rule 2" stopProcessing="true">
  109. <match url="^.*$" />
  110. <action type="Rewrite" url="index.php" />
  111. </rule>
  112. </rules>
  113. </rewrite>
  114. </system.webServer>
  115. </configuration>
  116. ]]></programlisting>
  117. <para>
  118. As regras acima irão encaminhar os pedidos de recursos existentes (links
  119. simbólicos existentes, arquivos não vazios, ou diretórios não vazios) nesse
  120. sentido, e todos os outros pedidos para o controlador frontal.
  121. </para>
  122. <note>
  123. <para>
  124. As regras de reescrita acima são para o Apache, para exemplos de regras de
  125. reescrita de outros servidores web, consulte a <link
  126. linkend="zend.controller.router.introduction">documentação do roteador</link>.
  127. </para>
  128. </note>
  129. </sect3>
  130. <sect3 id="zend.controller.quickstart.go.bootstrap">
  131. <title>Criando o Arquivo de Inicialização</title>
  132. <para>
  133. O arquivo de inicialização é a página onde passam todas as requisições
  134. -- <filename>html/index.php</filename> no caso. Abra o arquivo
  135. <filename>html/index.php</filename> em um editor de sua escolha
  136. e adicione o seguinte:
  137. </para>
  138. <programlisting language="php"><![CDATA[
  139. Zend_Controller_Front::run('/path/to/app/controllers');
  140. ]]></programlisting>
  141. <para>
  142. Isto irá instanciar e despachar o controlador frontal, que irá encaminhar as
  143. requisições para os controladores de ação.
  144. </para>
  145. </sect3>
  146. <sect3 id="zend.controller.quickstart.go.controller">
  147. <title>Criando o Controlador de Ação Padrão</title>
  148. <para>
  149. Antes de discutir sobre os controladores de ação, você deve primeiro entender como
  150. as requisições são roteadas no Zend Framework. Por padrão, o primeiro seguimento
  151. de um caminho de um <acronym>URL</acronym> aponta para um controlador, o segundo
  152. para uma ação. Por exemplo, dado o <acronym>URL</acronym>
  153. <filename>http://framework.zend.com/roadmap/components</filename>, o caminho é
  154. <filename>/roadmap/components</filename>, que irá apontar para o controlador
  155. <emphasis>roadmap</emphasis> e para a ação <emphasis>components</emphasis>. Se
  156. nenhuma ação for informada, a ação <emphasis>index</emphasis> é assumida, e se
  157. nenhum controlador for informado, o controlador <emphasis>index</emphasis> é
  158. assumido (seguindo a convenção do Apache que mapeia um
  159. <emphasis>DirectoryIndex</emphasis> automaticamente).
  160. </para>
  161. <para>
  162. O despachador do <classname>Zend_Controller</classname> toma o valor do
  163. controlador e mapeia-o para uma classe. Por padrão, ele pega o nome do
  164. controlador, com a primeira letra em maiúsculo, e acrescenta a palavra
  165. <emphasis>Controller</emphasis>. Sendo assim, em nosso exemplo acima, o
  166. controlador <emphasis>roadmap</emphasis> é mapeado para a classe
  167. <classname>RoadmapController</classname>.
  168. </para>
  169. <para>
  170. Semelhantemente, o valor da ação é mapeado para um método da classe do controlador.
  171. Por padrão, o valor é transformado em letras minúsculas, e a palavra
  172. <emphasis>Action</emphasis> é acrescentada. Sendo assim, em nosso exemplo acima, a
  173. ação <emphasis>components</emphasis> torna-se
  174. <methodname>componentsAction()</methodname>, e o método final chamado é
  175. <methodname>RoadmapController::componentsAction()</methodname>.
  176. </para>
  177. <para>
  178. Então, seguindo em frente, vamos agora criar um controlador de ação padrão e um
  179. método de ação. Como mencionado anteriormente, o controlador padrão e a ação são
  180. ambos chamados <emphasis>index</emphasis>. Abra o arquivo
  181. <filename>application/controllers/IndexController.php</filename>, e introduza
  182. o seguinte:
  183. </para>
  184. <programlisting language="php"><![CDATA[
  185. /** Zend_Controller_Action */
  186. class IndexController extends Zend_Controller_Action
  187. {
  188. public function indexAction()
  189. {
  190. }
  191. }
  192. ]]></programlisting>
  193. <para>
  194. O auxiliar de ação <link
  195. linkend="zend.controller.actionhelpers.viewrenderer">ViewRenderer</link> é
  196. habilitado por padrão. Isto significa que apenas definindo um método de ação
  197. simples e o script de visão correspondente, você terá o seu conteúdo mostrador
  198. imediatamente. Por padrão, <classname>Zend_View</classname> é usado como a camada
  199. de Visualização do <acronym>MVC</acronym>. O <emphasis>ViewRenderer</emphasis>
  200. faz alguma mágica, e usa o nome do controlador (ex.: <emphasis>index</emphasis>)
  201. e o nome da ação atual (ex.: <emphasis>index</emphasis>) para determinar qual
  202. modelo mostrar. Por padrão, modelos terminam com a extensão
  203. <filename>.phtml</filename>, então isto significa que, no exemplo acima o modelo
  204. <filename>index/index.phtml</filename> será mostrado. Adicionalmente, o
  205. <emphasis>ViewRenderer</emphasis> automaticamente assume que o diretório
  206. <filename>views/</filename>, que está no mesmo nível que do diretório do
  207. controlador, será o diretório base de visualização, e que o atual script de
  208. visualização estará no subdiretório <filename>views/scripts/</filename>, Sendo
  209. assim, o modelo mostrado é encontrado em
  210. <filename>application/views/scripts/index/index.phtml</filename>.
  211. </para>
  212. </sect3>
  213. <sect3 id="zend.controller.quickstart.go.view">
  214. <title>Criando o Script de Visualização</title>
  215. <para>
  216. Com mensionado <link linkend="zend.controller.quickstart.go.controller">na seção
  217. anterior</link>, scripts de visualização são encontrados em
  218. <filename>application/views/scripts/</filename>; O script padrão para o
  219. controlador e ação padrão está em
  220. <filename>application/views/scripts/index/index.phtml</filename>. Crie este
  221. arquivo e escreva nele algum <acronym>HTML</acronym>:
  222. </para>
  223. <programlisting language="php"><![CDATA[
  224. <!DOCTYPE html
  225. PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  226. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  227. <html>
  228. <head>
  229. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  230. <title>Meu primeiro aplicativo em Zend Framework</title>
  231. </head>
  232. <body>
  233. <h1>Olá, Mundo!</h1>
  234. </body>
  235. </html>
  236. ]]></programlisting>
  237. </sect3>
  238. <sect3 id="zend.controller.quickstart.go.errorhandler">
  239. <title>Criando o Controlador de Erro</title>
  240. <para>
  241. Por padrão, o <link linkend="zend.controller.plugins.standard.errorhandler">plugin
  242. do manipulador de erro</link> é registrado. Este plugin espera que um controlador
  243. para manipular erros exista. Por padrão, ele assume um
  244. <emphasis>ErrorController</emphasis> no módulo padrão com um método
  245. <methodname>errorAction()</methodname>:
  246. </para>
  247. <programlisting language="php"><![CDATA[
  248. class ErrorController extends Zend_Controller_Action
  249. {
  250. public function errorAction()
  251. {
  252. }
  253. }
  254. ]]></programlisting>
  255. <para>
  256. Assumindo a estrutura de diretório já discutida, este arquivo estará em
  257. <filename>application/controllers/ErrorController.php</filename>. Você também
  258. precisará criar o script de visualização em
  259. <filename>application/views/scripts/error/error.phtml</filename>; o conteúdo
  260. do exemplo parecerá com:
  261. </para>
  262. <programlisting language="php"><![CDATA[
  263. <!DOCTYPE html
  264. PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  265. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  266. <html>
  267. <head>
  268. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  269. <title>Erro</title>
  270. </head>
  271. <body>
  272. <h1>Ocorreu um erro</h1>
  273. <p>Ocorreu um erro; por favor, tente novamente mais tarde.</p>
  274. </body>
  275. </html>
  276. ]]></programlisting>
  277. </sect3>
  278. <sect3 id="zend.controller.quickstart.go.finish">
  279. <title>Veja o Site!</title>
  280. <para>
  281. Com o seu primeiro controlador e visualizador em suas mãos, você agora pode abrir
  282. o seu navegador e navegar até o site. Assumindo que o seu domínio é
  283. <filename>example.com</filename>, qualquer dos seguintes <acronym>URL</acronym>s
  284. irão mostrar a página que acabamos de criar:
  285. </para>
  286. <itemizedlist>
  287. <listitem>
  288. <para><filename>http://example.com/</filename></para>
  289. </listitem>
  290. <listitem>
  291. <para><filename>http://example.com/index</filename></para>
  292. </listitem>
  293. <listitem>
  294. <para><filename>http://example.com/index/index</filename></para>
  295. </listitem>
  296. </itemizedlist>
  297. <para>
  298. Agora você está pronto para iniciar a criação de mais controladores
  299. e metódos de ação. Parabéns!
  300. </para>
  301. </sect3>
  302. </sect2>
  303. </sect1>
  304. <!--
  305. vim:se ts=4 sw=4 et:
  306. -->