Zend_Controller-QuickStart.xml 16 KB

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