Zend_Controller-QuickStart.xml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. <sect1 id="zend.controller.quickstart">
  2. <title>Zend_Controller Quick Start</title>
  3. <sect2 id="zend.controller.quickstart.introduction">
  4. <title>Introducción</title>
  5. <para>
  6. <code>Zend_Controller</code>
  7. es el corazón del sistema de MVC de Zend Framework MVC. MVC
  8. son las siglas de
  9. <ulink url="http://en.wikipedia.org/wiki/Model-view-controller">
  10. Modelo-Vista-Controlador
  11. </ulink>
  12. y es un patrón de diseño con el objetivo de separar la
  13. lógica de la aplicación de la lógica de visualización.
  14. <code>Zend_Controller_Front</code>
  15. implementa el patrón
  16. <ulink url="http://www.martinfowler.com/eaaCatalog/frontController.html">
  17. Front Controller (Controlador Frontal)
  18. </ulink>
  19. en el cual todas las transacciones HTTP (requests) son
  20. interceptadas por el controlador frontal y despachado a una
  21. Acción particular de un Controlador según la URL pedida.
  22. </para>
  23. <para>
  24. El sistema
  25. <code>Zend_Controller</code>
  26. fue construido con la extensibilidad en mente, ya sea
  27. heredando las clases existentes, escribiendo nuevas clases
  28. que implementan varias interfaces o clases abstractas que
  29. forman la base de la familia de clases del controlador, o
  30. escribiendo plugins o helpers de las acciones para aumentar
  31. o manipular la funcionalidad del sistema.
  32. </para>
  33. </sect2>
  34. <sect2 id="zend.controller.quickstart.go">
  35. <title>Quick Start</title>
  36. <para>
  37. Si necesita información más detallada, mire las secciones
  38. siguientes. Si solamente quiere inicializar y ejecutar una
  39. aplicación rápidamente, siga leyendo.
  40. </para>
  41. <sect3 id="zend.controller.quickstart.go.directory">
  42. <title>Cree su estructura de archivos</title>
  43. <para>
  44. El primer paso es crear su estructura de archivos. La
  45. estructura típica es la siguiente:
  46. </para>
  47. <programlisting role="php"><![CDATA[
  48. application/
  49. controllers/
  50. IndexController.php
  51. models/
  52. views/
  53. scripts/
  54. index/
  55. index.phtml
  56. helpers/
  57. filters/
  58. html/
  59. .htaccess
  60. index.php
  61. ]]></programlisting>
  62. </sect3>
  63. <sect3 id="zend.controller.quickstart.go.docroot">
  64. <title>Establezca su document root</title>
  65. <para>
  66. Apunte su document root en su servidor web hacia el
  67. directorio
  68. <code>html</code>
  69. de la estrctura de archivos de arriba.
  70. </para>
  71. </sect3>
  72. <sect3 id="zend.controller.quickstart.go.rewrite">
  73. <title>Cree sus reglas de reescritura</title>
  74. <para>
  75. Edite el archivo
  76. <code>html/.htaccess</code>
  77. que aparece arriba de la siguiente forma:
  78. </para>
  79. <programlisting role="php"><![CDATA[
  80. RewriteEngine On
  81. RewriteCond %{REQUEST_FILENAME} -s [OR]
  82. RewriteCond %{REQUEST_FILENAME} -l [OR]
  83. RewriteCond %{REQUEST_FILENAME} -d
  84. RewriteRule ^.*$ - [NC,L]
  85. RewriteRule ^.*$ index.php [NC,L]
  86. ]]></programlisting>
  87. <para>
  88. La regla de arriba redigirá las peticiones a recuros existentes
  89. (enlaces simbólicos existentes, archivos no vacíos, o directorios no vacíos)
  90. en consecuencia, y todas las otras peticiones al front controller.
  91. </para>
  92. <note>
  93. <para>
  94. Las reglas de arriba pertenecen a Apache. Para ejemplos de reglas
  95. de rewrite para otros servidores web, mire la
  96. <link linkend="zend.controller.router.introduction">
  97. documentación de router
  98. </link>
  99. .
  100. </para>
  101. </note>
  102. </sect3>
  103. <sect3 id="zend.controller.quickstart.go.bootstrap">
  104. <title>Cree su archivo bootstrap</title>
  105. <para>
  106. El archivo bootstrap es la página a la que todas las peticiones
  107. son redirigidas a través de --
  108. <code>html/index.php</code>
  109. en este caso. Abra el archivo
  110. <code>html/index.php</code>
  111. en el editor de su elección y añada lo siguiente:
  112. </para>
  113. <programlisting role="php"><![CDATA[
  114. Zend_Controller_Front::run('/path/to/app/controllers');
  115. ]]></programlisting>
  116. <para>
  117. Esto instanciará y hará un dispatch del front controller, que
  118. redigirá las peticiones a los action controllers.
  119. </para>
  120. </sect3>
  121. <sect3 id="zend.controller.quickstart.go.controller">
  122. <title>Cree su action controller por defecto</title>
  123. <para>
  124. Antes de tratar los action controllers, debe primero
  125. entender cómo las peticiones son redirigidas en Zend Framework.
  126. Por defecto, el primero segmento de una ruta URL apunta
  127. a un controlador, y el segundo a una acción. Por ejemplo,
  128. dada la URL
  129. <code>
  130. http://framework.zend.com/roadmap/components
  131. </code>
  132. , la ruta es
  133. <code>/roadmap/components</code>
  134. , que apuntará al controlador
  135. <code>roadmap</code>
  136. y la acción
  137. <code>components</code>
  138. . Si no se suministra una acción, se asume la acción
  139. <code>index</code>
  140. , y si no se suministra un controlador, se asume el controlador
  141. <code>index</code>
  142. (siguiendo la convención de Apache de apuntar a
  143. <code>DirectoryIndex</code>
  144. automáticamente).
  145. </para>
  146. <para>
  147. El dispatcher de <code>Zend_Controller</code>
  148. toma entonces el valor del controlador y lo apunta
  149. a una clase. Por defecto, pone en mayúsculas la primera letra
  150. del nombre de controlador y agrega la palabra
  151. <code>Controller</code>
  152. . De esta forma, en nuestro ejemplo de arriba, el controlador
  153. <code>roadmap</code>
  154. es dirigido a la clase
  155. <code>RoadmapController</code>
  156. .
  157. </para>
  158. <para>
  159. De la misma forma, el valor de action es dirigido
  160. a un método de la clase controladora. Por defecto, el valor se
  161. pasa a minúsculas, y la palabra
  162. <code>Action</code>
  163. es añadida. De esta forma, en nuestro ejemplo de arriba, la acción
  164. <code>components</code>
  165. se convierte en
  166. <code>componentsAction</code>
  167. , y el método final llamado es
  168. <code>RoadmapController::componentsAction()</code>
  169. .
  170. </para>
  171. <para>
  172. Continuando, creemos ahora un action controller
  173. y un método de acción por defecto. Como se ha dicho antes,
  174. el controlador por defecto y la acción llamada son ambos
  175. <code>index</code>
  176. . Abra el archivo
  177. <code>application/controllers/IndexController.php</code>
  178. , e introduzca lo siguiente:
  179. </para>
  180. <programlisting role="php"><![CDATA[
  181. /** Zend_Controller_Action */
  182. class IndexController extends Zend_Controller_Action
  183. {
  184. public function indexAction()
  185. {
  186. }
  187. }
  188. ]]></programlisting>
  189. <para>
  190. Por defecto, el action helper
  191. <link linkend="zend.controller.actionhelpers.viewrenderer">
  192. ViewRenderer
  193. </link>
  194. está activado. Esto significa que simplemente
  195. definiendo un action method y un view script correspondiente,
  196. tendrá su contenido generado inmediatamente.
  197. Por defecto,
  198. <code>Zend_View</code>
  199. es usado como la capa Vista en el patrón MVC. El
  200. <code>ViewRenderer</code>
  201. hace algo de magia, y usa el nombre de controlador (e.g.,
  202. <code>index</code>
  203. ) y el nombre de acción actual (e.g.,
  204. <code>index</code>
  205. ) para determinar qué plantilla traer. Por defecto,
  206. las plantillas terminan con la extensión
  207. <code>.phtml</code>
  208. , lo que significa que en el ejemplo de arriba, la
  209. plantilla
  210. <code>index/index.phtml</code>
  211. será generada. Adicionalmente, el
  212. <code>ViewRenderer</code>
  213. asume automáticamente que la carpeta
  214. <code>views</code>
  215. al mismo nivel que la carpeta controller será
  216. la carpeta raíz de la vista, y que el script de vista actual
  217. estará en la subcarpeta
  218. <code>views/scripts/</code>.
  219. De esta forma, la plantilla generada será encontrada en
  220. <code>application/views/scripts/index/index.phtml</code>
  221. .
  222. </para>
  223. </sect3>
  224. <sect3 id="zend.controller.quickstart.go.view">
  225. <title>Cree su view script</title>
  226. <para>
  227. Como hemos mencionado
  228. <link linkend="zend.controller.quickstart.go.controller">
  229. en la sección anterior
  230. </link>
  231. , los scripts de vista se encuentran en
  232. <code>application/views/scripts/</code>
  233. ; el view script para el controlador y la acción por defecto
  234. está en
  235. <code>application/views/scripts/index/index.phtml</code>
  236. . Cree este archivo, y escriba un poco de HTML:
  237. </para>
  238. <programlisting role="php"><![CDATA[
  239. <!DOCTYPE html
  240. PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  241. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  242. <html>
  243. <head>
  244. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  245. <title>Mi primera aplicación Zend Framework</title>
  246. </head>
  247. <body>
  248. <h1>>¡Hola, Mundo!</h1>
  249. </body>
  250. </html>
  251. ]]></programlisting>
  252. </sect3>
  253. <sect3 id="zend.controller.quickstart.go.errorhandler">
  254. <title>Cree su controlador de errores</title>
  255. <para>
  256. Por defecto, está registrado
  257. <link linkend="zend.controller.plugins.standard.errorhandler">
  258. el plugin 'error handler'
  259. </link>. Este plugin espera que exista
  260. un controlador para manejar los errores.
  261. Por defecto, asume un
  262. <code>ErrorController</code>
  263. en el módulo default con un método
  264. <code>errorAction</code>
  265. :
  266. </para>
  267. <programlisting role="php"><![CDATA[
  268. class ErrorController extends Zend_Controller_Action
  269. {
  270. public function errorAction()
  271. {
  272. }
  273. }
  274. ]]></programlisting>
  275. <para>
  276. Asumiendo el sistema de carpetas discutido anteriormente,
  277. este archivo irá en
  278. <code>application/controllers/ErrorController.php</code>
  279. . También necesitará crear un view script en
  280. <code>application/views/scripts/error/error.phtml</code>
  281. ; el contenido de ejemplo será parecido a:
  282. </para>
  283. <programlisting role="php"><![CDATA[
  284. <!DOCTYPE html
  285. PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  286. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  287. <html>
  288. <head>
  289. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  290. <title>Error</title>
  291. </head>
  292. <body>
  293. <h1>Ocurrió un error</h1>
  294. <p>Ocurrió un error; Por favor, inténtelo de nuevo más tarde.</p>
  295. </body>
  296. </html>
  297. ]]></programlisting>
  298. </sect3>
  299. <sect3 id="zend.controller.quickstart.go.finish">
  300. <title>¡Vea el sitio!</title>
  301. <para>
  302. Con su primer controlador y vista, ya puede arrancar su navegador y acceder a su sitio.
  303. Asumiendo que
  304. <code>example.com</code>
  305. es su dominio, cualquiera de las siguientes URLs le llevará a
  306. la página que acaba de crear:
  307. </para>
  308. <itemizedlist>
  309. <listitem>
  310. <para>
  311. <code>http://example.com/</code>
  312. </para>
  313. </listitem>
  314. <listitem>
  315. <para>
  316. <code>http://example.com/index</code>
  317. </para>
  318. </listitem>
  319. <listitem>
  320. <para>
  321. <code>http://example.com/index/index</code>
  322. </para>
  323. </listitem>
  324. </itemizedlist>
  325. <para>
  326. Ya está listo para empezar a crear más métodos de controladores y acciones. ¡Felicidades!
  327. </para>
  328. </sect3>
  329. </sect2>
  330. </sect1>
  331. <!--
  332. vim:se ts=4 sw=4 et:
  333. -->