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