TigerZF
🌐Español

B.8. Zend Framework 1.0

Al actualizar desde una versión anterior a Zend Framework 1.0 o superior debe tener en cuenta las siguientes notas de migración.

B.8.1. Zend_Controller

Los principales cambios introducidos en 1.0.0RC1 son la introducción y la habilitación por defecto del plugin ErrorHandler y el ayudante de acción ViewRenderer. Por favor lea detenidamente la documentación de cada uno para ver cómo funcionan y qué efecto pueden tener en sus aplicaciones.

El plugin ErrorHandler se ejecuta durante postDispatch() comprobando si hay excepciones, y reenviando a un controlador de manejo de errores especificado. Debería incluir dicho controlador en su aplicación. Puede deshabilitarlo estableciendo el parámetro del controlador frontal noErrorHandler:

$front->setParam('noErrorHandler', true);

El ayudante de acción ViewRenderer automatiza la inyección de vistas en los controladores de acción, así como el autorenderizado de scripts de vista en función de la acción actual. El principal problema que puede encontrar es si tiene acciones que no renderizan scripts de vista y tampoco reenvían ni redirigen, ya que el ViewRenderer intentará renderizar un script de vista basado en el nombre de la acción.

Existen varias estrategias que puede seguir para actualizar su código. A corto plazo, puede deshabilitar globalmente el ViewRenderer en el bootstrap de su controlador frontal antes de despachar:

// Assuming $front is an instance of Zend_Controller_Front
$front->setParam('noViewRenderer', true);

Sin embargo, esta no es una buena estrategia a largo plazo, ya que significa que muy probablemente terminará escribiendo más código.

Cuando esté listo para empezar a usar la funcionalidad del ViewRenderer, hay varias cosas que debe observar en su código de controlador. Primero, mire sus métodos de acción (los métodos que terminan en 'Action'), y determine qué hace cada uno. Si no ocurre nada de lo siguiente, necesitará hacer cambios:

  • Llamadas a $this->render();

  • Llamadas a $this->_forward();

  • Llamadas a $this->_redirect();

  • Llamadas al ayudante de acción Redirector

El cambio más sencillo es deshabilitar el autorenderizado para ese método:

$this->_helper->viewRenderer->setNoRender();

Si descubre que ninguno de sus métodos de acción está renderizando, reenviando o redirigiendo, probablemente querrá colocar la línea anterior en sus métodos preDispatch() o init():

public function preDispatch()
{
    // disable view script autorendering
    $this->_helper->viewRenderer->setNoRender()
    // .. do other things...
}

Si está llamando a render(), y está utilizando la estructura de directorios modular convencional, querrá cambiar su código para aprovechar el autorenderizado:

  • Si está renderizando múltiples scripts de vista en una sola acción, no necesita cambiar nada.

  • Si simplemente está llamando a render() sin argumentos, puede eliminar esas líneas.

  • Si está llamando a render() con argumentos, y no realiza ningún procesamiento después ni renderiza múltiples scripts de vista, puede cambiar estas llamadas para que sean $this->_helper->viewRenderer();.

Si no está utilizando la estructura de directorios modular convencional, hay una variedad de métodos para establecer la ruta base de la vista y las especificaciones de ruta de scripts, de modo que pueda aprovechar el ViewRenderer. Por favor lea la documentación del ViewRenderer para obtener información sobre estos métodos.

Si está utilizando un objeto de vista del registro, o personalizando su objeto de vista, o usando una implementación de vista diferente, querrá inyectar el ViewRenderer con ese objeto. Esto se puede hacer fácilmente en cualquier momento.

  • Antes de despachar una instancia del controlador frontal:

    // Assuming $view has already been defined
    $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
    Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
    
  • En cualquier momento durante el proceso de bootstrap:

    $viewRenderer =
        Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
    $viewRenderer->setView($view);
    

Hay muchas formas de modificar el ViewRenderer, incluyendo establecer un script de vista diferente para renderizar, especificar reemplazos para todos los elementos reemplazables de una ruta de script de vista (incluyendo el sufijo), elegir un segmento con nombre de respuesta a utilizar, y más. Si no está utilizando la estructura de directorios modular convencional, incluso puede asociar diferentes especificaciones de ruta con el ViewRenderer.

Le animamos a adaptar su código para usar el ErrorHandler y el ViewRenderer, ya que ahora son funcionalidad principal.

B.8.2. Zend_Currency

Crear un objeto de Zend_Currency se ha vuelto más simple. Ya no tiene que dar un script o establecerlo a NULL. El parámetro de script opcional ahora es una opción que se puede establecer mediante el método setFormat().

$currency = new Zend_Currency($currency, $locale);

El método setFormat() ahora toma un array de opciones. Estas opciones se establecen de forma permanente y sobrescriben todos los valores establecidos previamente. También se ha añadido una nueva opción 'precision'. Las siguientes opciones han sido refactorizadas:

  • position: Reemplazo del antiguo parámetro 'rules'.

  • script: Reemplazo del antiguo parámetro 'script'.

  • format: Reemplazo del antiguo parámetro 'locale' que ya no establece nuevas divisas sino solo el formato numérico.

  • display: Reemplazo del antiguo parámetro 'rules'.

  • precision: Nuevo parámetro.

  • name: Reemplazo del antiguo parámetro 'rules'. Establece el nombre completo de la divisa.

  • currency: Nuevo parámetro.

  • symbol: Nuevo parámetro.

$currency->setFormat(array $options);

El método toCurrency() ya no soporta los parámetros opcionales 'script' y 'locale'. En su lugar, toma un array de opciones que puede contener las mismas claves que el método setFormat().

$currency->toCurrency($value, array $options);

Los métodos getSymbol(), getShortName(), getName(), getRegionList() y getCurrencyList() ya no son estáticos y se pueden llamar desde dentro del objeto. Devuelven los valores establecidos del objeto si no se ha establecido ningún parámetro.