Zend_Controller-Migration.xml 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15103 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.controller.migration">
  5. <title>Migración de versiones anteriores</title>
  6. <para>
  7. La API de los componentes de MVC ha cambiado en el tiempo. Si usted ha empezado a
  8. usar una versión anterior de Zend Framework, siga la guía de abajo para
  9. migrar sus acripts para usar la arquitectura nueva.
  10. </para>
  11. <sect2 id="zend.controller.migration.fromoneseventooneeight">
  12. <title>Migración de 1.7.x a 1.8.0 o nuevas versiones</title>
  13. <sect3 id="zend.controller.migration.fromoneseventooneeight.router">
  14. <title>Cambios en Standard Route </title>
  15. <para>
  16. Como los segmentos traducidos fueron presentados en la nueva
  17. standard
  18. route, El caracter
  19. <methodname>@</methodname>
  20. es ahora un carácter especial al principio de
  21. un segmento del route. Para poder utilizarlo en un segmento estático,
  22. tiene que escaparlo usando un segundo caracater
  23. <methodname>@</methodname>
  24. como prefijo. La misma regla se aplica ahora para el
  25. caracter
  26. <methodname>:</methodname>
  27. .
  28. </para>
  29. </sect3>
  30. </sect2>
  31. <sect2 id="zend.controller.migration.fromonesixtooneseven">
  32. <title>Migración de 1.6.x a 1.7.0 o nuevas versiones</title>
  33. <sect3 id="zend.controller.migration.fromonesixtooneseven.dispatcher">
  34. <title>Cambios en la interfaz del Dispatcher</title>
  35. <para>
  36. Los usuarios llamaron nuestra atención el hecho de que
  37. <classname> Zend_Controller_Action_Helper_ViewRenderer </classname> estaba
  38. utilizando un método Dispatcher de la clase abstracta que no está en
  39. el Dispatcher de la interfaz. Hemos añadido el siguiente método para
  40. garantizar que los Dispatcher de costumbre seguirán trabajando con las
  41. implementaciones enviadas:
  42. </para>
  43. <itemizedlist>
  44. <listitem><para>
  45. <methodname>formatModuleName()</methodname>: debe utilizarse para tomar un nuevo
  46. nombre de controlador, tal como uno que debería estar basado dentro de una petición
  47. objeto, y cambiarlo a un nombre de clase apropiado que la clase extendida
  48. <classname>Zend_Controller_Action</classname> debería usar
  49. </para></listitem>
  50. </itemizedlist>
  51. </sect3>
  52. </sect2>
  53. <sect2 id="zend.controller.migration.fromoneohtoonesix">
  54. <title>Migrando desde 1.5.x to 1.6.0 o versiones posteriores</title>
  55. <sect3 id="zend.controller.migration.fromoneohtoonesix.dispatcher">
  56. <title>Cambios en la interfaz del Dispatcher</title>
  57. <para>
  58. Los usuarios atrajeron nuestra atención con el hecho de que
  59. <classname> Zend_Controller_Front </classname> y
  60. <classname> Zend_Controller_Router_Route_Module </classname> fueron
  61. utilizando métodos del despachador que no estaban en la interfaz del
  62. despachador. Ahora hemos adicionado los siguientes tres métodos para
  63. asegurar que los despachadores diseñados sigan trabajando con las
  64. implementaciones enviadas:
  65. </para>
  66. <itemizedlist>
  67. <listitem><para>
  68. <methodname>getDefaultModule()</methodname>: debe retornar el nombre del
  69. módulo por defecto.
  70. </para></listitem>
  71. <listitem><para>
  72. <methodname>getDefaultControllerName()</methodname>: debe retornar el
  73. nombre del controlador por defecto.
  74. </para></listitem>
  75. <listitem><para>
  76. <methodname>getDefaultAction()</methodname>: debe retornar el
  77. nombre de la acción por defecto.
  78. </para></listitem>
  79. </itemizedlist>
  80. </sect3>
  81. </sect2>
  82. <sect2 id="zend.controller.migration.fromoneohtoonefive">
  83. <title>Migranado desde 1.0.x a 1.5.0 o versiones posteriores</title>
  84. <para>
  85. Aunque la mayoría de la funcionalidad básica sigue siendo la misma, y todas las
  86. funcionalidades documentadas siguen siendo la mismas, hay una en particular
  87. "característica" <emphasis>undocumented</emphasis> que ha cambiado.
  88. </para>
  89. <para>
  90. Al escribir las URLs, la manera de escribir la documentada acción camelCased
  91. es usar un separador de palabra, que son "." o '-' por defecto,
  92. pero pueden ser configurados en el despachador. El despachador internamente
  93. convierte en minúsculas el nombre de la acción, y usa estos separadores de palabra para
  94. volver a montar el método de la acción camelCasing. Sin embargo, debido a que las
  95. funciones de PHP no son sensibles a mayúsculas y minúsculas, usted <emphasis>podría</emphasis>
  96. escribir las URLs usando camelCasing, y el despachador los devolvería
  97. a la misma ubicación. Por ejemplo, 'camel-cased' se convertirá en
  98. 'camelCasedAction' por el despachador, mientras que 'camelCased' se
  99. convertiría en 'camelCasedAction'; sin embargo, debido a la insensibilidad de
  100. PHP, ambos ejecutarán el mismo método.
  101. </para>
  102. <para>
  103. Esto causa problemas con la vista ViewRenderer cuando devuelve scripts de la
  104. vista. El canónico, la documentada forma es que todos los separadores de palabra
  105. se conviertan en guiones, y las palabras en minúsculas. Esto crea
  106. un lazo semántico entre las acciones y los scripts de las vistas, y la
  107. normalización asegura que los scripts puedan ser encontrados. Sin embargo, si la
  108. acción "camelCased' es llamada y de hecho retornada, el separador de la palabra
  109. no está mas presente, y los ViewRenderer intenta devolver
  110. a una ubicación diferente -- 'camelcased.phtml' en vez de
  111. 'camel-cased.phtml'.
  112. </para>
  113. <para>
  114. Algunos desarrolladores se basarón en esta "característica", que nunca fue la intención.
  115. Varios cambios en el árbol 1.5.0 , sin embargo, hizo que la vista
  116. ViewRenderer ya no resuelva estas direcciones, la semántica esta ahora
  117. forzada. La primera de ellas, el despachador ahora impone
  118. la sensibilidad en los nombres de la acción. Lo que esto significa es que la referencia a
  119. sus acciones en la url utilisando camelCasing ya no para devolver
  120. al mismo método que utilizan los separadores de palabras (es decir, 'camel-casing').
  121. Esto nos lleva a la vista ViewRenderer ahora sólo en honor a las acciones
  122. palabra-separador cuando se devuleven los scripts vista.
  123. </para>
  124. <para>
  125. Si usted nota que estaba dependiendo en esta "caracteristica", usted tiene muchas
  126. opciones:
  127. </para>
  128. <itemizedlist>
  129. <listitem><para>
  130. Mejor opción: cambiar el nombre de sus scripts de la vistas. Pros:
  131. compatibilidad hacia adelante. Contras: si usted tiene muchos scripts vista que
  132. se basan en la primera vista, una conducta no deseada, tendrá
  133. mucho por hacer.
  134. </para></listitem>
  135. <listitem>
  136. <para>
  137. Segunda mejor opción: La vista ViewRenderer delega ahora resoluciones de scripts
  138. de vistas a <classname> Zend_Filter_Inflector </classname>; se puede
  139. modificar las normas del inflector para que ya no separe
  140. las palabras de una acción con un guión:
  141. </para>
  142. <programlisting language="php"><![CDATA[
  143. $viewRenderer =
  144. Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
  145. $inflector = $viewRenderer->getInflector();
  146. $inflector->setFilterRule(':action', array(
  147. new Zend_Filter_PregReplace(
  148. '#[^a-z0-9' . preg_quote(DIRECTORY_SEPARATOR, '#') . ']+#i',
  149. ''
  150. ),
  151. 'StringToLower'
  152. ));
  153. ]]></programlisting>
  154. <para>
  155. El anterior código modificará el inflector para que ya no
  156. separe las palabras con guión, usted puede querer eliminar
  157. el filtro 'StringToLower' si usted desea<emphasis>hacer</emphasis>
  158. el nombre de script de vista actual camelCased también.
  159. </para>
  160. <para>
  161. Si cambiar el nombre del script vista sería demasiado tedioso o tiempo
  162. consumido, esta es su mejor opción hasta que pueda encontrar el
  163. tiempo para hacerlo.
  164. </para>
  165. </listitem>
  166. <listitem>
  167. <para>
  168. La opción menos deseable: Usted puede forzar al despachador para
  169. despachar nombres de acción camelCased con un nuevo controlador
  170. bandera, 'useCaseSensitiveActions':
  171. </para>
  172. <programlisting language="php"><![CDATA[
  173. $front->setParam('useCaseSensitiveActions', true);
  174. ]]></programlisting>
  175. <para>
  176. Esto le permitirá utilizar camelCasing sobre la url y siguir
  177. tieniendo resuelta la misma acción como cuando se utilizaba los separadores
  178. de palabra. Sin embargo, esto significa que los problemas originales
  179. se iran terminando, lo más probable es utilizar la
  180. segunda opción anterior, además de esto para que las cosas funcionen
  181. confiablemente en todo.
  182. </para>
  183. <para>
  184. Note, también, el uso de esta bandera aumentará un aviso de que
  185. este uso es obsoleto.
  186. </para>
  187. </listitem>
  188. </itemizedlist>
  189. </sect2>
  190. <sect2 id="zend.controller.migration.fromzeroninethree">
  191. <title>Migrando desde 0.9.3 a 1.0.0RC1 o versiones posteriores</title>
  192. <para>
  193. Los cambios principales introducidos en 1.0.0RC1 son la introducción de
  194. y la activación por defecto del plugin
  195. <link
  196. linkend="zend.controller.plugins.standard.errorhandler">ErrorHandler</link>
  197. y de acción ayuda <link
  198. linkend="zend.controller.actionhelpers.viewrenderer">ViewRenderer</link>
  199. Por favor, lea la documentación de cada uno completamente para ver
  200. cómo funcionan y qué efecto pueden tener en sus
  201. aplicaciones.
  202. </para>
  203. <para>
  204. El plugin <methodname>ErrorHandler</methodname> corre durante
  205. <methodname>postDispatch ()</methodname> para el control de excepciones, y enviarlo
  206. a un especifico controlador de errores. Usted debe incluir tal
  207. controlador en su aplicación. Usted puede desactivarlo determinando el
  208. parámetro del controlador <methodname> noErrorHandler </methodname>:
  209. </para>
  210. <programlisting language="php"><![CDATA[
  211. $front->setParam('noErrorHandler', true);
  212. ]]></programlisting>
  213. <para>
  214. La acción de ayuda <methodname>ViewRenderer</methodname> automatiza inyección de vistas
  215. en controladores de acción así como los autogeneradores de scripts de vistas
  216. basados en la acción actual. El principal problema que se puede encontrar es
  217. si se tiene acciones que no generan scripts de vista y tampoco llevan
  218. o redireccionan, como <methodname>ViewRenderer</methodname> intentará generar
  219. un scrip de vista basado en el nombre de la acción.
  220. </para>
  221. <para>
  222. Existen varias estrategias que se puede tomar para actualizar su código. En
  223. el corto plazo, se puede deshabilitar globalmente
  224. <methodname> ViewRenderer </methodname> en su controlador frontal bootstrap antes del
  225. despache:
  226. </para>
  227. <programlisting language="php"><![CDATA[
  228. // Asumiendo que $front es una instacia de Zend_Controller_Front
  229. $front->setParam('noViewRenderer', true);
  230. ]]></programlisting>
  231. <para>
  232. Sin embargo, esta no es una buena estrategia a largo plazo, eso significa que es
  233. probable que usted escriba mas código.
  234. </para>
  235. <para>
  236. Cuando se esta listo para empezar a usar la funcionalidad
  237. <methodname>ViewRenderer</methodname>, existen demasiadas cosas que ver en el
  238. código del controlador. Primero, ver las acciones método (los métodos
  239. terminados en 'Action'), y determinar lo que cada uno esta haciendo. Si ninguno
  240. de los siguientes esta pasando, usted necesitará hacer cambios:
  241. </para>
  242. <itemizedlist>
  243. <listitem><para>Llamar a <methodname>$this-&gt;render()</methodname></para></listitem>
  244. <listitem><para>Llamar a <methodname>$this-&gt;_forward()</methodname></para></listitem>
  245. <listitem><para>Llamar a <methodname>$this-&gt;_redirect()</methodname></para></listitem>
  246. <listitem><para>Llamar a el <methodname>Redirector</methodname> action helper</para></listitem>
  247. </itemizedlist>
  248. <para>
  249. La forma mas fácil de cambiar es deshabilitar auto-rendering para ese método:
  250. </para>
  251. <programlisting language="php"><![CDATA[
  252. $this->_helper->viewRenderer->setNoRender();
  253. ]]></programlisting>
  254. <para>
  255. Si se encuentra que ninguno de sus acciones método se estan enviando,
  256. transmitiendo, o redireccionando, lo más probable es que se quiera poner encima de la
  257. línea en su <methodname> preDispatch () </methodname> o <methodname> de init() </methodname>
  258. métodos:
  259. </para>
  260. <programlisting language="php"><![CDATA[
  261. public function preDispatch()
  262. {
  263. // disable view script autorendering
  264. $this->_helper->viewRenderer->setNoRender()
  265. // .. do other things...
  266. }
  267. ]]></programlisting>
  268. <para>
  269. Si se está llamando a <methodname>render()</methodname>, y si está usando <link
  270. linkend="zend.controller.modular"> la Convención Modular
  271. de estructura de directorios</link>, usted preferirá cambiar su código a
  272. hacer uso del auto envio:
  273. </para>
  274. <itemizedlist>
  275. <listitem>
  276. <para>
  277. Si se esta enviando scripts de vistas multiples en una sóla
  278. acción, usted no necesoita cambiar nada.
  279. </para>
  280. </listitem>
  281. <listitem>
  282. <para>
  283. Si se está simplemente llamando <methodname>render()</methodname> sin ningún
  284. argumento, se puede remover tales líneas.
  285. </para>
  286. </listitem>
  287. <listitem>
  288. <para>
  289. Si se está llamando con argumentos, y
  290. no se esta haciendo ningún proceso después or enviando
  291. scrips de vistas multiples, se puede cambiar estas llamadas a leer
  292. <methodname>$this-&gt;_helper-&gt;viewRenderer()</methodname>.
  293. </para>
  294. </listitem>
  295. </itemizedlist>
  296. <para>
  297. Si no se esta usando la convención modular de estructura de directorios,
  298. existen variedad de métodos para definir la dirección de la vista base y
  299. scripts de especificaciones de dirección así se puede hacer uso de
  300. <methodname>ViewRenderer</methodname>. Pro favor leer la docuemntación de<link
  301. linkend="zend.controller.actionhelpers.viewrenderer">ViewRenderer
  302. </link> para información de esos métodos.
  303. </para>
  304. <para>
  305. Si se esta usando un objeto vista desde el registro o personalizando su
  306. objeto vista o usando una diferente implementación de vista, se deseará
  307. introducir <methodname>ViewRenderer</methodname> con este objeto. Esto puede ser
  308. terminado facilmente en cualquier momento.
  309. </para>
  310. <itemizedlist>
  311. <listitem>
  312. <para>
  313. Antes de despachar una instancia del controlador frontal:
  314. </para>
  315. <programlisting language="php"><![CDATA[
  316. // Asumiendo que $view ha sido definido
  317. $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
  318. Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
  319. ]]></programlisting>
  320. </listitem>
  321. <listitem>
  322. <para>
  323. Cualquier momento el processo bootstrap:
  324. </para>
  325. <programlisting language="php"><![CDATA[
  326. $viewRenderer =
  327. Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
  328. $viewRenderer->setView($view);
  329. ]]></programlisting>
  330. </listitem>
  331. </itemizedlist>
  332. <para>
  333. Existen muchas vias para modificar <methodname>ViewRenderer</methodname>,
  334. incluyendo la definición de diferentes scripts de vista a enviar, especificando
  335. reemplazantes para todos los elementos reemplazables de la dirección del script vista
  336. (incluyendo el sufijo), eligiendo una respuesta nombrada segmento para
  337. utilizar y mas. Si no esta usando la convención modular de
  338. estructura de directorios, se puede asociar diferentes especificaciones
  339. de direcciones con <methodname>ViewRenderer</methodname>.
  340. </para>
  341. <para>
  342. Le animamos a adaptar el código para utilizar el
  343. <methodname>ErrorHandler</methodname> y <methodname>ViewRenderer</methodname>, ya que son
  344. ahora funcionalidad básica.
  345. </para>
  346. </sect2>
  347. <sect2 id="zend.controller.migration.fromzeroninetwo">
  348. <title>Migrando desde 0.9.2 to 0.9.3 o nuevas versiones</title>
  349. <para>
  350. 0.9.3 introduce <link
  351. linkend="zend.controller.actionhelpers">action helpers</link>.
  352. Como parte de este cambio, los siguientes métodos han sido removidos ya
  353. que ahora son encapsulados en <link
  354. linkend="zend.controller.actionhelpers.redirector">redirector
  355. action helper</link>:
  356. </para>
  357. <itemizedlist>
  358. <listitem>
  359. <para>
  360. <methodname>setRedirectCode()</methodname>; usa
  361. <classname>Zend_Controller_Action_Helper_Redirector::setCode()</classname>.
  362. </para>
  363. </listitem>
  364. <listitem>
  365. <para>
  366. <methodname>setRedirectPrependBase()</methodname>; usa
  367. <classname>Zend_Controller_Action_Helper_Redirector::setPrependBase()</classname>.
  368. </para>
  369. </listitem>
  370. <listitem>
  371. <para>
  372. <methodname>setRedirectExit()</methodname>; usa
  373. <classname>Zend_Controller_Action_Helper_Redirector::setExit()</classname>.
  374. </para>
  375. </listitem>
  376. </itemizedlist>
  377. <para>
  378. Leer la documentación <link linkend="zend.controller.actionhelpers">ayudantes
  379. de acción</link> para obtener más información sobre cómo
  380. recuperar y manipular objetos de ayuda, y la <link
  381. linkend = "zend.controller.actionhelpers.redirector"> documentación
  382. del ayudante redirector</link> para obtener más información sobre la configuración
  383. de reorientar las opciones (así como los alternativos métodos para la redirección).
  384. </para>
  385. </sect2>
  386. <sect2 id="zend.controller.migration.fromzerosix">
  387. <title>Migrando desde 0.6.0 to 0.8.0 o versiones nuevas</title>
  388. <para>
  389. Por los cambios previos, el más básico uso de los componentes MVC
  390. sigue siendo el mismo:
  391. </para>
  392. <programlisting language="php"><![CDATA[
  393. Zend_Controller_Front::run('/path/to/controllers');
  394. ]]></programlisting>
  395. <para>
  396. Sin embargo, la estructura de directorios se sometió a una revisión, varios
  397. componentes han sido eliminados, y varios otros ya sea añadidos o adicionados.
  398. Los cambios incluyen:
  399. </para>
  400. <itemizedlist>
  401. <listitem>
  402. <para>
  403. <classname>Zend_Controller_Router</classname> fue eliminado en favor de
  404. reescribir el router.
  405. </para>
  406. </listitem>
  407. <listitem>
  408. <para>
  409. <classname> Zend_Controller_RewriteRouter </classname> ha sido renombrado a
  410. <classname> Zend_Controller_Router_Rewrite </classname>, y promovido a
  411. router estándar enviado con el framework;
  412. <classname> Zend_Controller_Front </classname> lo utilizará por defecto si
  413. ningún otro router es sustituido.
  414. </para>
  415. </listitem>
  416. <listitem>
  417. <para>
  418. Una nueva clase ruta para uso con el router reescribir se
  419. presentó,
  420. <classname> Zend_Controller_Router_Route_Module </classname>, que abarca
  421. la ruta por defecto utilizado por el MVC, y tiene soporte para el<link
  422. linkend = "zend.controller.modular">controlador de
  423. módulos </link>.
  424. </para>
  425. </listitem>
  426. <listitem>
  427. <para>
  428. <classname>Zend_Controller_Router_StaticRoute</classname> was renamed
  429. to <classname>Zend_Controller_Router_Route_Static</classname>.
  430. </para>
  431. </listitem>
  432. <listitem>
  433. <para>
  434. <classname>Zend_Controller_Dispatcher</classname> was renamed
  435. <classname>Zend_Controller_Dispatcher_Standard</classname>.
  436. </para>
  437. </listitem>
  438. <listitem>
  439. <para>
  440. Los argumentos de <classname>Zend_Controller_Action::_forward()</classname>
  441. han cambiado. la firma es ahora:
  442. </para>
  443. <programlisting language="php"><![CDATA[
  444. final protected function _forward($action,
  445. $controller = null,
  446. $module = null,
  447. array $params = null);
  448. ]]></programlisting>
  449. <para>
  450. <methodname>$accion</methodname> es siempre necesaria; si ningún controlador es
  451. especificado, es asumida una acción en el actual controlador.
  452. <methodname>$module</methodname> es siempre ignorado a menos que
  453. <methodname>$controller</methodname> sea especificado. Por último, cualquier
  454. <methodname>$params</methodname> previsto será adjuntado a la
  455. solicitud del objeto. Si no necesita el controlador o el
  456. módulo, pero aún tienen que pasar los parámetros, basta con especificar
  457. null para esos valores.
  458. </para>
  459. </listitem>
  460. </itemizedlist>
  461. </sect2>
  462. <sect2 id="zend.controller.migration.fromzerotwo">
  463. <title>Migrando desde 0.2.0 o antes de 0.6.0</title>
  464. <para>
  465. El mas basico uso de los componentes de MVC no ha cambiado; se puede
  466. seguir utilizando a cada uno en la siguiente manera:
  467. </para>
  468. <programlisting language="php"><![CDATA[
  469. Zend_Controller_Front::run('/path/to/controllers');
  470. ]]></programlisting>
  471. <programlisting language="php"><![CDATA[
  472. /* -- crear una ruta -- */
  473. $router = new Zend_Controller_RewriteRouter();
  474. $router->addRoute('user',
  475. 'user/:username',
  476. array('controller' => 'user', 'action' => 'info')
  477. );
  478. /* -- configurarlo en un controlador -- */
  479. $ctrl = Zend_Controller_Front::getInstance();
  480. $ctrl->setRouter($router);
  481. /* -- configurar el directorio controladores y despahcarlos -- */
  482. $ctrl->setControllerDirectory('/path/to/controllers');
  483. $ctrl->dispatch();
  484. ]]></programlisting>
  485. <para>
  486. Alentamos el uso del objeto Response para agregar contenido y
  487. cabeceras. Esto permitirá una mayor flexibilidad en el formato de salida intercambiando
  488. (por instancias, JSON o XML en lugar de XHTML) en sus aplicaciones.
  489. Por defecto, el envío <methodname> distpach() </methodname> enviará la respuesta, enviando ambas
  490. cabeceras y enviando cuanlquier contenido. También se puede tener el controlador front
  491. retorne la respuesta usando <methodname>returnResponse()</methodname>,
  492. y luego enviar la respuesta a través de su propia lógica. Una versión futura
  493. del controlador front puede hacer valer el uso de la respuesta a través de objetos mediante
  494. la salida de buffers.
  495. </para>
  496. <para>
  497. Hay muchas características adicionales que amplían las existentes API,
  498. y estas son observadas en la documentación.
  499. </para>
  500. <para>
  501. Los principales cambios que tendrán que ser conscientes de cuando se encuentre
  502. la subclase de los diversos componentes. Clave entre estos son:
  503. </para>
  504. <itemizedlist>
  505. <listitem>
  506. <para>
  507. <classname>Zend_Controller_Front::distpach()</classname> por defecto
  508. intercepta excepciones en la respuesta del objeto, y no los envia
  509. en orden de prevenir un sistema de informacion sensitivo de ser
  510. enviado. Se puede anular esto de varias maneras:
  511. </para>
  512. <itemizedlist>
  513. <listitem>
  514. <para>
  515. Configurar <methodname>throwExceptions()</methodname> en el controlador
  516. front:
  517. </para>
  518. <programlisting language="php"><![CDATA[
  519. $front->throwExceptions(true);
  520. ]]></programlisting>
  521. </listitem>
  522. <listitem>
  523. <para>
  524. Configurar <methodname>renderExceptions()</methodname> en la respuesta del
  525. objeto:
  526. </para>
  527. <programlisting language="php"><![CDATA[
  528. $response->renderExceptions(true);
  529. $front->setResponse($response);
  530. $front->dispatch();
  531. // o:
  532. $front->returnResponse(true);
  533. $response = $front->dispatch();
  534. $response->renderExceptions(true);
  535. echo $response;
  536. ]]></programlisting>
  537. </listitem>
  538. </itemizedlist>
  539. </listitem>
  540. <listitem><para>
  541. <classname>Zend_Controller_Dispatcher_Interface::dispatch()</classname>
  542. ahora acepta y devuelve un <xref linkend="zend.controller.request" />
  543. objeto en lugar de un despachador simbólico.
  544. </para></listitem>
  545. <listitem><para>
  546. <classname>Zend_Controller_Router_Interface::route()</classname>
  547. ahora acepta y devuelve un <xref linkend="zend.controller.request" />
  548. objeto en lugar de un despachador simbólico.
  549. </para></listitem>
  550. <listitem>
  551. <para><classname>Zend_Controller_Action</classname> los cambios incluyen:</para>
  552. <itemizedlist>
  553. <listitem><para>
  554. El constructor acepta ahora exactamente tres argumentos,
  555. <classname> Zend_Controller_Request_Abstract $request</classname>
  556. <classname> Zend_Controller_Response_Abstract $response</classname>
  557. y <methodname> array $ params (opcional) </methodname>.
  558. <classname> Zend_Controller_Action::__construct()</classname> usa
  559. los argumentos para para configurar la petición, la respuesta, y propiedades
  560. invokeArgs del objeto, y si se sobrecarga el
  561. constructor se debe hacer lo mismo. Mejor aún, use
  562. el método <methodname>init()</methodname> para hacer cualquier configuración
  563. a la instancia, ya que este método es llamado como la acción
  564. final del constructor.
  565. </para></listitem>
  566. <listitem><para>
  567. <methodname>run()</methodname>, ya no se define como definitivo, pero es
  568. también no utilizado por el controlador front; su único
  569. objetivo es para el uso de la clase como un controlador de página. Ello
  570. ahora tiene dos argumentos opcionales, uno
  571. <classname> Zend_Controller_Request_Abstract $request</classname>
  572. y <classname> Zend_Controller_Response_Abstract $response</classname>.
  573. </para></listitem>
  574. <listitem><para>
  575. <methodname>indexAction()</methodname>ya no necesita ser
  576. definido, pero se recomienda como acción por defecto. Esto
  577. permite utilizar RewriteRouter y la acción controladores para
  578. especificar los diferentes métodos de acción.
  579. </para></listitem>
  580. <listitem><para>
  581. <methodname>__call()</methodname> debería ser sobrecargado para manejar las
  582. indefinidas acciones automaticamente.
  583. </para></listitem>
  584. <listitem><para>
  585. <methodname>_redirect ()</methodname> ahora toma un segundo opcional
  586. argumento, el código HTTP a retornar con la redirección, y
  587. un opcional tercer argumento, <methodname>$prependBase</methodname>,
  588. que puede indicar que la URL base registrada en la
  589. solicitud del objeto debería ser añadido a la URL especificada.
  590. </para></listitem>
  591. <listitem>
  592. <para>
  593. La propiedad <methodname>_action</methodname> ya no está configurada.
  594. Esta propiedad fue un <classname> Zend_Controller_Dispatcher_Token </classname>,
  595. el cual ya no existe en la actual encarnación.
  596. El único propósito de la muestra era proporcionar
  597. información sobre la solicitud del controlador, acción,
  598. y los parámetros URL. Esta información es ahora
  599. disponible en la solicitud del objeto, y puede acceder
  600. como sigue:
  601. </para>
  602. <programlisting language="php"><![CDATA[
  603. // Recuperar las solicitud del nombre del controlador
  604. // El acceso ha sido a través: $this->_action->getControllerName().
  605. // El ejemplo siguiente usa getRequest(), aunque se pueda acceder
  606. // directamente a la $_request property; usar getRequest() es recomendado como
  607. // una clase padre pueda sobrecargar el acceso a la solicitud del objeto.
  608. $controller = $this->getRequest()->getControllerName();
  609. // Recuperar la solicitud del nombre de la accion
  610. // El acceso ha sido a través: $this->_action->getActionName().
  611. $action = $this->getRequest()->getActionName();
  612. // Recuperar la solicitud de los parametros
  613. // Esto no ha cambiado; Los métodos _getParams() y _getParam() simplemente
  614. // proxy a la solictud del objeto.
  615. $params = $this->_getParams();
  616. // solicitud 'foo' parametro, usando 'default' como valor por defecto si no lo encuentra
  617. $foo = $this->_getParam('foo', 'default');
  618. ]]></programlisting>
  619. </listitem>
  620. <listitem>
  621. <para>
  622. <methodname>noRouteAction()</methodname> ha sido eliminado. La
  623. manera adecuada de manejar inexistentes métodos
  624. de acciones se desearia enrutarlos a una
  625. acción por defecto utilizando <methodname>__call()</methodname>:
  626. </para>
  627. <programlisting language="php"><![CDATA[
  628. public function __call($method, $args)
  629. {
  630. // If an unmatched 'Action' method was requested, pass on to the
  631. // default action method:
  632. if ('Action' == substr($method, -6)) {
  633. return $this->defaultAction();
  634. }
  635. throw new Zend_Controller_Exception('Invalid method called');
  636. }
  637. ]]></programlisting>
  638. </listitem>
  639. </itemizedlist>
  640. </listitem>
  641. <listitem><para>
  642. <classname>Zend_Controller_RewriteRouter::setRewriteBase()</classname> ha
  643. sido eliminado. Use <classname>Zend_Controller_Front::setBaseUrl()</classname>
  644. en lugar de (o <classname>Zend_Controller_Request_Http::setBaseUrl()</classname>, si esta usando
  645. la petición de la clase).
  646. </para></listitem>
  647. <listitem><para>
  648. <classname>Zend_Controller_Plugin_Interface</classname> se reemplazó
  649. por <classname> Zend_Controller_Plugin_Abstract</classname>. Ahora todos los métodos
  650. aceptan y devuelven un objeto <xref linkend="zend.controller.request" />
  651. en lugar de un despachador simbólico.
  652. </para></listitem>
  653. </itemizedlist>
  654. </sect2>
  655. </sect1>
  656. <!--
  657. vim:se ts=4 sw=4 et:
  658. -->