Zend_Controller-QuickStart.xml 16 KB

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