Zend_Controller-Migration.xml 39 KB

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