Zend_Controller-QuickStart.xml 13 KB

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