| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 15103 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.controller.migration">
- <title>Migración de versiones anteriores</title>
- <para>
- La
- <acronym>API</acronym>
- de los componentes de
- <acronym>MVC</acronym>
- ha cambiado en el tiempo. Si usted ha empezado a
- usar una versión anterior de Zend Framework,
- siga la guía de abajo para
- migrar sus acripts para usar la arquitectura nueva.
- </para>
- <sect2 id="zend.controller.migration.fromoneseventooneeight">
- <title>Migración de 1.7.x a 1.8.0 o nuevas versiones</title>
- <sect3 id="zend.controller.migration.fromoneseventooneeight.router">
- <title>Cambios en Standard Route </title>
- <para>
- Como los segmentos traducidos fueron presentados en la nueva
- standard
- route, El
- caracter
- <methodname>@</methodname>
- es ahora un carácter especial al principio de
- un segmento del route. Para poder
- utilizarlo en un segmento estático,
- tiene que escaparlo usando un segundo caracater
- <methodname>@</methodname>
- como prefijo. La misma regla se aplica ahora para el
- caracter
- <methodname>:</methodname>
- .
- </para>
- </sect3>
- </sect2>
- <sect2 id="zend.controller.migration.fromonesixtooneseven">
- <title>Migración de 1.6.x a 1.7.0 o nuevas versiones</title>
- <sect3 id="zend.controller.migration.fromonesixtooneseven.dispatcher">
- <title>Cambios en la interfaz del Dispatcher</title>
- <para>
- Los usuarios llamaron nuestra atención el hecho de que
- <classname> Zend_Controller_Action_Helper_ViewRenderer </classname>
- estaba
- utilizando un método Dispatcher de la clase abstracta que no está en
- el
- Dispatcher de la interfaz. Hemos añadido el siguiente método para
- garantizar que los
- Dispatcher de costumbre seguirán trabajando con las
- implementaciones enviadas:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>formatModuleName()</methodname>
- : debe utilizarse para tomar un nuevo
- nombre de controlador, tal como uno que debería estar basado dentro de una petición
- objeto, y cambiarlo a un nombre de clase apropiado que la clase extendida
- <classname>Zend_Controller_Action</classname>
- debería usar
- </para>
- </listitem>
- </itemizedlist>
- </sect3>
- </sect2>
- <sect2 id="zend.controller.migration.fromoneohtoonesix">
- <title>Migrando desde 1.5.x to 1.6.0 o versiones posteriores</title>
- <sect3 id="zend.controller.migration.fromoneohtoonesix.dispatcher">
- <title>Cambios en la interfaz del Dispatcher</title>
- <para>
- Los usuarios atrajeron nuestra atención con el hecho de que
- <classname> Zend_Controller_Front </classname>
- y
- <classname> Zend_Controller_Router_Route_Module </classname>
- fueron
- utilizando métodos del despachador que no estaban en la interfaz del
- despachador. Ahora hemos adicionado los siguientes tres métodos para
- asegurar que los despachadores diseñados sigan trabajando con las
- implementaciones enviadas:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>getDefaultModule()</methodname>
- : debe retornar el nombre del
- módulo por defecto.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getDefaultControllerName()</methodname>
- : debe retornar el
- nombre del controlador por defecto.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getDefaultAction()</methodname>
- : debe retornar el
- nombre de la acción por defecto.
- </para>
- </listitem>
- </itemizedlist>
- </sect3>
- </sect2>
- <sect2 id="zend.controller.migration.fromoneohtoonefive">
- <title>Migranado desde 1.0.x a 1.5.0 o versiones posteriores</title>
- <para>
- Aunque la mayoría de la funcionalidad básica sigue siendo la misma, y todas las
- funcionalidades documentadas siguen siendo la mismas, hay una en particular
- "característica"
- <emphasis>undocumented</emphasis>
- que ha cambiado.
- </para>
- <para>
- Al escribir las
- <acronym>URL</acronym>
- s, la manera de escribir la documentada acción camelCased
- es usar un separador de
- palabra, que son "." o '-' por defecto,
- pero pueden ser configurados en el despachador.
- El despachador internamente
- convierte en minúsculas el nombre de la acción, y usa estos
- separadores de palabra para
- volver a montar el método de la acción camelCasing. Sin
- embargo, debido a que las
- funciones de
- <acronym>PHP</acronym>
- no son sensibles a mayúsculas y minúsculas, usted
- <emphasis>podría</emphasis>
- escribir las URLs usando camelCasing, y el despachador los devolvería
- a la misma
- ubicación. Por ejemplo, 'camel-cased' se convertirá en
- 'camelCasedAction' por el
- despachador, mientras que 'camelCased' se
- convertiría en 'camelCasedAction'; sin embargo,
- debido a la insensibilidad de
- <acronym>PHP</acronym>
- , ambos ejecutarán el mismo método.
- </para>
- <para>
- Esto causa problemas con la vista ViewRenderer cuando devuelve scripts de la
- vista. El
- canónico, la documentada forma es que todos los separadores de palabra
- se conviertan en
- guiones, y las palabras en minúsculas. Esto crea
- un lazo semántico entre las acciones y
- los scripts de las vistas, y la
- normalización asegura que los scripts puedan ser
- encontrados. Sin embargo, si la
- acción "camelCased' es llamada y de hecho retornada, el
- separador de la palabra
- no está mas presente, y los ViewRenderer intenta devolver
- a una
- ubicación diferente -- 'camelcased.phtml' en vez de
- 'camel-cased.phtml'.
- </para>
- <para>
- Algunos desarrolladores se basarón en esta "característica", que nunca fue la intención.
- Varios cambios en el árbol 1.5.0 , sin embargo, hizo que la vista
- ViewRenderer ya no
- resuelva estas direcciones, la semántica esta ahora
- forzada. La primera de ellas, el
- despachador ahora impone
- la sensibilidad en los nombres de la acción. Lo que esto
- significa es que la referencia a
- sus acciones en la
- <acronym>URL</acronym>
- utilisando camelCasing ya no para devolver
- al mismo método que utilizan los separadores
- de palabras (es decir, 'camel-casing').
- Esto nos lleva a la vista ViewRenderer ahora sólo
- en honor a las acciones
- palabra-separador cuando se devuleven los scripts vista.
- </para>
- <para>
- Si usted nota que estaba dependiendo en esta "caracteristica", usted tiene muchas
- opciones:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Mejor opción: cambiar el nombre de sus scripts de la vistas. Pros:
- compatibilidad hacia adelante. Contras: si usted tiene muchos scripts vista que
- se basan en la primera vista, una conducta no deseada, tendrá
- mucho por hacer.
- </para>
- </listitem>
- <listitem>
- <para>
- Segunda mejor opción: La vista ViewRenderer delega ahora resoluciones de scripts
- de vistas a
- <classname> Zend_Filter_Inflector </classname>
- ; se puede
- modificar las normas del inflector para que ya no separe
- las palabras
- de una acción con un guión:
- </para>
- <programlisting language="php"><![CDATA[
- $viewRenderer =
- Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
- $inflector = $viewRenderer->getInflector();
- $inflector->setFilterRule(':action', array(
- new Zend_Filter_PregReplace(
- '#[^a-z0-9' . preg_quote(DIRECTORY_SEPARATOR, '#') . ']+#i',
- ''
- ),
- 'StringToLower'
- ));
- ]]></programlisting>
- <para>
- El anterior código modificará el inflector para que ya no
- separe las palabras con
- guión, usted puede querer eliminar
- el filtro 'StringToLower' si usted desea
- <emphasis>hacer</emphasis>
- el nombre de script de vista actual camelCased también.
- </para>
- <para>
- Si cambiar el nombre del script vista sería demasiado tedioso o tiempo
- consumido, esta es su mejor opción hasta que pueda encontrar el
- tiempo para
- hacerlo.
- </para>
- </listitem>
- <listitem>
- <para>
- La opción menos deseable: Usted puede forzar al despachador para
- despachar
- nombres de acción camelCased con un nuevo controlador
- bandera,
- 'useCaseSensitiveActions':
- </para>
- <programlisting language="php"><![CDATA[
- $front->setParam('useCaseSensitiveActions', true);
- ]]></programlisting>
- <para>
- Esto le permitirá utilizar camelCasing sobre la url y siguir
- tieniendo resuelta
- la misma acción como cuando se utilizaba los separadores
- de palabra. Sin embargo,
- esto significa que los problemas originales
- se iran terminando, lo más probable
- es utilizar la
- segunda opción anterior, además de esto para que las cosas
- funcionen
- confiablemente en todo.
- </para>
- <para>
- Note, también, el uso de esta bandera aumentará un aviso de que
- este uso es
- obsoleto.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
- <sect2 id="zend.controller.migration.fromzeroninethree">
- <title>Migrando desde 0.9.3 a 1.0.0RC1 o versiones posteriores</title>
- <para>
- Los cambios principales introducidos en 1.0.0RC1 son la introducción de
- y la activación
- por defecto del plugin
- <link linkend="zend.controller.plugins.standard.errorhandler">ErrorHandler</link>
- y de acción ayuda
- <link linkend="zend.controller.actionhelpers.viewrenderer">ViewRenderer</link>
- Por favor, lea la documentación de cada uno completamente para ver
- cómo funcionan y qué
- efecto pueden tener en sus
- aplicaciones.
- </para>
- <para>
- El plugin
- <methodname>ErrorHandler</methodname>
- corre durante
- <methodname>postDispatch ()</methodname>
- para el control de excepciones, y enviarlo
- a un especifico controlador de errores. Usted
- debe incluir tal
- controlador en su aplicación. Usted puede desactivarlo determinando el
- parámetro del controlador
- <methodname> noErrorHandler </methodname>
- :
- </para>
- <programlisting language="php"><![CDATA[
- $front->setParam('noErrorHandler', true);
- ]]></programlisting>
- <para>
- La acción de ayuda
- <methodname>ViewRenderer</methodname>
- automatiza inyección de vistas
- en controladores de acción así como los autogeneradores de
- scripts de vistas
- basados en la acción actual. El principal problema que se puede
- encontrar es
- si se tiene acciones que no generan scripts de vista y tampoco llevan
- o
- redireccionan, como
- <methodname>ViewRenderer</methodname>
- intentará generar
- un scrip de vista basado en el nombre de la acción.
- </para>
- <para>
- Existen varias estrategias que se puede tomar para actualizar su código. En
- el corto
- plazo, se puede deshabilitar globalmente
- <methodname> ViewRenderer </methodname>
- en su controlador frontal bootstrap antes del
- despache:
- </para>
- <programlisting language="php"><![CDATA[
- // Asumiendo que $front es una instacia de Zend_Controller_Front
- $front->setParam('noViewRenderer', true);
- ]]></programlisting>
- <para>
- Sin embargo, esta no es una buena estrategia a largo plazo, eso significa que es
- probable que usted escriba mas código.
- </para>
- <para>
- Cuando se esta listo para empezar a usar la funcionalidad
- <methodname>ViewRenderer</methodname>
- , existen demasiadas cosas que ver en el
- código del controlador. Primero, ver las
- acciones método (los métodos
- terminados en 'Action'), y determinar lo que cada uno esta
- haciendo. Si ninguno
- de los siguientes esta pasando, usted necesitará hacer cambios:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Llamar a
- <methodname>$this->render()</methodname>
- </para>
- </listitem>
- <listitem>
- <para>
- Llamar a
- <methodname>$this->_forward()</methodname>
- </para>
- </listitem>
- <listitem>
- <para>
- Llamar a
- <methodname>$this->_redirect()</methodname>
- </para>
- </listitem>
- <listitem>
- <para>
- Llamar a el
- <methodname>Redirector</methodname>
- action helper
- </para>
- </listitem>
- </itemizedlist>
- <para>
- La forma mas fácil de cambiar es deshabilitar auto-rendering para ese método:
- </para>
- <programlisting language="php"><![CDATA[
- $this->_helper->viewRenderer->setNoRender();
- ]]></programlisting>
- <para>
- Si se encuentra que ninguno de sus acciones método se estan enviando,
- transmitiendo, o
- redireccionando, lo más probable es que se quiera poner encima de la
- línea en su
- <methodname> preDispatch () </methodname>
- o
- <methodname> de init() </methodname>
- métodos:
- </para>
- <programlisting language="php"><![CDATA[
- public function preDispatch()
- {
- // disable view script autorendering
- $this->_helper->viewRenderer->setNoRender()
- // .. do other things...
- }
- ]]></programlisting>
- <para>
- Si se está llamando a
- <methodname>render()</methodname>
- , y si está usando
- <link linkend="zend.controller.modular"> la Convención Modular
- de estructura de directorios</link>
- , usted preferirá cambiar su código a
- hacer uso del auto envio:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Si se esta enviando scripts de vistas multiples en una sóla
- acción, usted no
- necesoita cambiar nada.
- </para>
- </listitem>
- <listitem>
- <para>
- Si se está simplemente llamando
- <methodname>render()</methodname>
- sin ningún
- argumento, se puede remover tales líneas.
- </para>
- </listitem>
- <listitem>
- <para>
- Si se está llamando con argumentos, y
- no se esta haciendo ningún proceso después
- or enviando
- scrips de vistas multiples, se puede cambiar estas llamadas a leer
- <methodname>$this->_helper->viewRenderer()</methodname>
- .
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Si no se esta usando la convención modular de estructura de directorios,
- existen variedad
- de métodos para definir la dirección de la vista base y
- scripts de especificaciones de
- dirección así se puede hacer uso de
- <methodname>ViewRenderer</methodname>
- . Pro favor leer la docuemntación de
- <link linkend="zend.controller.actionhelpers.viewrenderer">ViewRenderer
- </link>
- para información de esos métodos.
- </para>
- <para>
- Si se esta usando un objeto vista desde el registro o personalizando su
- objeto vista o
- usando una diferente implementación de vista, se deseará
- introducir
- <methodname>ViewRenderer</methodname>
- con este objeto. Esto puede ser
- terminado facilmente en cualquier momento.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Antes de despachar una instancia del controlador frontal:
- </para>
- <programlisting language="php"><![CDATA[
- // Asumiendo que $view ha sido definido
- $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
- Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
- ]]></programlisting>
- </listitem>
- <listitem>
- <para>
- Cualquier momento el processo bootstrap:
- </para>
- <programlisting language="php"><![CDATA[
- $viewRenderer =
- Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
- $viewRenderer->setView($view);
- ]]></programlisting>
- </listitem>
- </itemizedlist>
- <para>
- Existen muchas vias para modificar
- <methodname>ViewRenderer</methodname>
- ,
- incluyendo la definición de diferentes scripts de vista a enviar, especificando
- reemplazantes para todos los elementos reemplazables de la dirección del script vista
- (incluyendo el sufijo), eligiendo una respuesta nombrada segmento para
- utilizar y mas. Si
- no esta usando la convención modular de
- estructura de directorios, se puede asociar
- diferentes especificaciones
- de direcciones con
- <methodname>ViewRenderer</methodname>
- .
- </para>
- <para>
- Le animamos a adaptar el código para utilizar el
- <methodname>ErrorHandler</methodname>
- y
- <methodname>ViewRenderer</methodname>
- , ya que son
- ahora funcionalidad básica.
- </para>
- </sect2>
- <sect2 id="zend.controller.migration.fromzeroninetwo">
- <title>Migrando desde 0.9.2 to 0.9.3 o nuevas versiones</title>
- <para>
- 0.9.3 introduce
- <link linkend="zend.controller.actionhelpers">action helpers</link>
- .
- Como parte de este cambio, los siguientes métodos han sido removidos ya
- que ahora son
- encapsulados en
- <link linkend="zend.controller.actionhelpers.redirector">redirector
- action helper</link>
- :
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>setRedirectCode()</methodname>
- ; usa
- <methodname>Zend_Controller_Action_Helper_Redirector::setCode()</methodname>
- .
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setRedirectPrependBase()</methodname>
- ; usa
- <methodname>Zend_Controller_Action_Helper_Redirector::setPrependBase()</methodname>
- .
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setRedirectExit()</methodname>
- ; usa
- <methodname>Zend_Controller_Action_Helper_Redirector::setExit()</methodname>
- .
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Leer la documentación
- <link linkend="zend.controller.actionhelpers">ayudantes
- de acción</link>
- para obtener más información sobre cómo
- recuperar y manipular objetos de ayuda, y la
- <link linkend="zend.controller.actionhelpers.redirector"> documentación
- del ayudante redirector</link>
- para obtener más información sobre la configuración
- de reorientar las opciones (así como los alternativos métodos para la redirección).
- </para>
- </sect2>
- <sect2 id="zend.controller.migration.fromzerosix">
- <title>Migrando desde 0.6.0 to 0.8.0 o versiones nuevas</title>
- <para>
- Por los cambios previos, el más básico uso de los componentes
- <acronym>MVC</acronym>
- sigue siendo el mismo:
- </para>
- <programlisting language="php"><![CDATA[
- Zend_Controller_Front::run('/path/to/controllers');
- ]]></programlisting>
- <para>
- Sin embargo, la estructura de directorios se sometió a una revisión, varios
- componentes han sido eliminados, y varios otros ya sea añadidos o adicionados.
- Los
- cambios incluyen:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <classname>Zend_Controller_Router</classname>
- fue eliminado en favor de
- reescribir el router.
- </para>
- </listitem>
- <listitem>
- <para>
- <classname> Zend_Controller_RewriteRouter </classname>
- ha sido renombrado a
- <classname> Zend_Controller_Router_Rewrite </classname>
- , y promovido a
- router estándar enviado con el framework;
- <classname> Zend_Controller_Front </classname>
- lo utilizará por defecto si
- ningún otro router es sustituido.
- </para>
- </listitem>
- <listitem>
- <para>
- Una nueva clase ruta para uso con el router reescribir se
- presentó,
- <classname> Zend_Controller_Router_Route_Module </classname>
- , que abarca
- la ruta por defecto utilizado por el
- <acronym>MVC</acronym>
- , y tiene soporte para el
- <link linkend="zend.controller.modular">controlador de
- módulos </link>
- .
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Router_StaticRoute</classname>
- was renamed
- to
- <classname>Zend_Controller_Router_Route_Static</classname>
- .
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Dispatcher</classname>
- was renamed
- <classname>Zend_Controller_Dispatcher_Standard</classname>
- .
- </para>
- </listitem>
- <listitem>
- <para>
- Los argumentos de
- <methodname>Zend_Controller_Action::_forward()</methodname>
- han cambiado. la firma es ahora:
- </para>
- <programlisting language="php"><![CDATA[
- final protected function _forward($action,
- $controller = null,
- $module = null,
- array $params = null);
- ]]></programlisting>
- <para>
- <varname>$accion</varname>
- es siempre necesaria; si ningún controlador es
- especificado, es asumida una
- acción en el actual controlador.
- <varname>$module</varname>
- es siempre ignorado a menos que
- <varname>$controller</varname>
- sea especificado. Por último, cualquier
- <varname>$params</varname>
- previsto será adjuntado a la
- solicitud del objeto. Si no necesita el controlador
- o el
- módulo, pero aún tienen que pasar los parámetros, basta con especificar
- null
- para esos valores.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
- <sect2 id="zend.controller.migration.fromzerotwo">
- <title>Migrando desde 0.2.0 o antes de 0.6.0</title>
- <para>
- El mas basico uso de los componentes de
- <acronym>MVC</acronym>
- no ha cambiado; se puede
- seguir utilizando a cada uno en la siguiente manera:
- </para>
- <programlisting language="php"><![CDATA[
- Zend_Controller_Front::run('/path/to/controllers');
- ]]></programlisting>
- <programlisting language="php"><![CDATA[
- /* -- crear una ruta -- */
- $router = new Zend_Controller_RewriteRouter();
- $router->addRoute('user',
- 'user/:username',
- array('controller' => 'user', 'action' => 'info')
- );
- /* -- configurarlo en un controlador -- */
- $ctrl = Zend_Controller_Front::getInstance();
- $ctrl->setRouter($router);
- /* -- configurar el directorio controladores y despahcarlos -- */
- $ctrl->setControllerDirectory('/path/to/controllers');
- $ctrl->dispatch();
- ]]></programlisting>
- <para>
- Alentamos el uso del objeto Response para agregar contenido y
- cabeceras. Esto permitirá
- una mayor flexibilidad en el formato de salida intercambiando
- (por instancias,
- <acronym>JSON</acronym>
- o
- <acronym>XML</acronym>
- en lugar de
- <acronym>XHTML</acronym>
- ) en sus aplicaciones.
- Por defecto, el envío
- <methodname> distpach() </methodname>
- enviará la respuesta, enviando ambas
- cabeceras y enviando cuanlquier contenido. También
- se puede tener el controlador front
- retorne la respuesta usando
- <methodname>returnResponse()</methodname>
- ,
- y luego enviar la respuesta a través de su propia lógica. Una versión futura
- del
- controlador front puede hacer valer el uso de la respuesta a través de objetos mediante
- la salida de buffers.
- </para>
- <para>
- Hay muchas características adicionales que amplían las existentes API,
- y estas son
- observadas en la documentación.
- </para>
- <para>
- Los principales cambios que tendrán que ser conscientes de cuando se encuentre
- la
- subclase de los diversos componentes. Clave entre estos son:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>Zend_Controller_Front::distpach()</methodname>
- por defecto
- intercepta excepciones en la respuesta del objeto, y no los envia
- en
- orden de prevenir un sistema de informacion sensitivo de ser
- enviado. Se puede
- anular esto de varias maneras:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Configurar
- <methodname>throwExceptions()</methodname>
- en el controlador
- front:
- </para>
- <programlisting language="php"><![CDATA[
- $front->throwExceptions(true);
- ]]></programlisting>
- </listitem>
- <listitem>
- <para>
- Configurar
- <methodname>renderExceptions()</methodname>
- en la respuesta del
- objeto:
- </para>
- <programlisting language="php"><![CDATA[
- $response->renderExceptions(true);
- $front->setResponse($response);
- $front->dispatch();
- // o:
- $front->returnResponse(true);
- $response = $front->dispatch();
- $response->renderExceptions(true);
- echo $response;
- ]]></programlisting>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>
- <methodname>Zend_Controller_Dispatcher_Interface::dispatch()</methodname>
- ahora acepta y devuelve un
- <xref linkend="zend.controller.request"/>
- objeto en lugar de un despachador simbólico.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>Zend_Controller_Router_Interface::route()</methodname>
- ahora acepta y devuelve un
- <xref linkend="zend.controller.request"/>
- objeto en lugar de un despachador simbólico.
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Action</classname>
- los cambios incluyen:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- El constructor acepta ahora exactamente tres argumentos,
- <classname> Zend_Controller_Request_Abstract $request</classname>
- <classname> Zend_Controller_Response_Abstract $response</classname>
- y
- <methodname> array $ params (opcional) </methodname>
- .
- <methodname> Zend_Controller_Action::__construct()</methodname>
- usa
- los argumentos para para configurar la petición, la respuesta, y propiedades
- invokeArgs del objeto, y si se sobrecarga el
- constructor se debe hacer lo mismo. Mejor aún, use
- el método
- <methodname>init()</methodname>
- para hacer cualquier configuración
- a la instancia, ya que este método es llamado como la acción
- final del constructor.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>run()</methodname>
- , ya no se define como definitivo, pero es
- también no utilizado por el controlador front; su único
- objetivo es para el uso de la clase como un controlador de página. Ello
- ahora tiene dos argumentos opcionales, uno
- <classname> Zend_Controller_Request_Abstract $request</classname>
- y
- <classname> Zend_Controller_Response_Abstract $response</classname>
- .
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>indexAction()</methodname>
- ya no necesita ser
- definido, pero se recomienda como acción por defecto. Esto
- permite utilizar RewriteRouter y la acción controladores para
- especificar los diferentes métodos de acción.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>__call()</methodname>
- debería ser sobrecargado para manejar las
- indefinidas acciones automaticamente.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>_redirect ()</methodname>
- ahora toma un segundo opcional
- argumento, el código
- <acronym>HTTP</acronym>
- a retornar con la redirección, y
- un opcional tercer argumento,
- <varname>$prependBase</varname>
- ,
- que puede indicar que la
- <acronym>URL</acronym>
- base registrada en la
- solicitud del objeto debería ser añadido a la
- <acronym>URL</acronym>
- especificada.
- </para>
- </listitem>
- <listitem>
- <para>
- La propiedad
- <methodname>_action</methodname>
- ya no está configurada.
- Esta propiedad fue un
- <classname> Zend_Controller_Dispatcher_Token </classname>
- ,
- el cual ya no existe en la actual encarnación.
- El único propósito de la
- muestra era proporcionar
- información sobre la solicitud del controlador,
- acción,
- y los parámetros
- <acronym>URL</acronym>
- . Esta información es ahora
- disponible en la solicitud del objeto, y
- puede acceder
- como sigue:
- </para>
- <programlisting language="php"><![CDATA[
- // Recuperar las solicitud del nombre del controlador
- // El acceso ha sido a través: $this->_action->getControllerName().
- // El ejemplo siguiente usa getRequest(), aunque se pueda acceder
- // directamente a la $_request property; usar getRequest() es recomendado como
- // una clase padre pueda sobrecargar el acceso a la solicitud del objeto.
- $controller = $this->getRequest()->getControllerName();
- // Recuperar la solicitud del nombre de la accion
- // El acceso ha sido a través: $this->_action->getActionName().
- $action = $this->getRequest()->getActionName();
- // Recuperar la solicitud de los parametros
- // Esto no ha cambiado; Los métodos _getParams() y _getParam() simplemente
- // proxy a la solictud del objeto.
- $params = $this->_getParams();
- // solicitud 'foo' parametro, usando 'default' como valor por defecto si no lo encuentra
- $foo = $this->_getParam('foo', 'default');
- ]]></programlisting>
- </listitem>
- <listitem>
- <para>
- <methodname>noRouteAction()</methodname>
- ha sido eliminado. La
- manera adecuada de manejar inexistentes métodos
- de
- acciones se desearia enrutarlos a una
- acción por defecto utilizando
- <methodname>__call()</methodname>
- :
- </para>
- <programlisting language="php"><![CDATA[
- public function __call($method, $args)
- {
- // If an unmatched 'Action' method was requested, pass on to the
- // default action method:
- if ('Action' == substr($method, -6)) {
- return $this->defaultAction();
- }
- throw new Zend_Controller_Exception('Invalid method called');
- }
- ]]></programlisting>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>
- <methodname>Zend_Controller_RewriteRouter::setRewriteBase()</methodname>
- ha
- sido eliminado. Use
- <methodname>Zend_Controller_Front::setBaseUrl()</methodname>
- en lugar de (o
- <methodname>Zend_Controller_Request_Http::setBaseUrl()</methodname>
- , si esta usando
- la petición de la clase).
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Plugin_Interface</classname>
- se reemplazó
- por
- <classname> Zend_Controller_Plugin_Abstract</classname>
- . Ahora todos los métodos
- aceptan y devuelven un objeto
- <xref linkend="zend.controller.request"/>
- en lugar de un despachador simbólico.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|