TigerZF
🌐Español

B.2. Zend Framework 1.10

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

B.2.1. Zend_Controller_Front

Se corrigió un comportamiento incorrecto que se producía cuando no había ninguna ruta de módulo ni ninguna ruta que coincidiera con la petición dada. Anteriormente, el enrutador devolvía un objeto de petición sin modificar, por lo que el controlador frontal simplemente mostraba el controlador y la acción por defecto. A partir de Zend Framework 1.10, el enrutador lanzará correctamente una excepción si ninguna ruta coincide, tal y como se indica en la interfaz del enrutador. El plugin de errores capturará entonces dicha excepción y redirigirá al controlador de errores. Puede entonces comprobar ese error específico con la constante Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:

/**
 * Before 1.10
 */
    public function errorAction()
    {
        $errors = $this->_getParam('error_handler');

        switch ($errors->type) {
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
    // ...

/**
 * With 1.10
 */
    public function errorAction()
    {
        $errors = $this->_getParam('error_handler');

        switch ($errors->type) {
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
    // ...

B.2.2. Zend_Feed_Reader

Con la introducción de Zend Framework 1.10, la forma en que Zend_Feed_Reader gestiona la recuperación de Autores y Colaboradores cambió, introduciendo una ruptura en la compatibilidad hacia atrás. Este cambio fue un esfuerzo por armonizar el tratamiento de dichos datos entre las clases RSS y Atom del componente y permitir la devolución de datos de Autor y Colaborador en una forma más accesible, usable y detallada. También corrige un error, ya que se asumía que cualquier elemento de autor hacía referencia a un nombre. En RSS esto es incorrecto, ya que un elemento de autor en realidad solo debe proporcionar una dirección de correo electrónico. Además, la implementación original aplicaba sus límites de RSS a los feeds Atom, reduciendo considerablemente la utilidad del parser con ese formato.

Este cambio significa que métodos como getAuthors() y getContributors ya no devuelven un simple array de cadenas extraídas de los elementos RSS y Atom correspondientes. En su lugar, el valor devuelto es una subclase de ArrayObject llamada Zend_Feed_Reader_Collection_Author que simula un array multidimensional iterable de Autores. Cada miembro de este objeto será un simple array con tres posibles claves (según lo permitan los datos de origen). Estas incluyen: name, email y uri.

El comportamiento original de estos métodos habría devuelto un simple array de cadenas, cada una intentando representar un único nombre, pero en realidad esto no era fiable, ya que no existe ninguna norma que rija el formato de las cadenas de Autor de RSS.

El método más simple para simular el comportamiento original de estos métodos es usar getValues() de Zend_Feed_Reader_Collection_Author, que también devuelve un simple array de cadenas que representan los "datos más relevantes", presumiendo que para los autores serán su nombre. Cada valor del array resultante se deriva del valor "name" asociado a cada Autor (si está presente). En la mayoría de los casos este simple cambio es fácil de aplicar, tal y como se muestra a continuación.

/**
 * Before 1.10
 */
$feed = Zend_Feed_Reader::import('http://example.com/feed');
$authors = $feed->getAuthors();

/**
 * With 1.10
 */
$feed = Zend_Feed_Reader::import('http://example.com/feed');
$authors = $feed->getAuthors()->getValues();

B.2.3. Zend_File_Transfer

B.2.3.1. Cambio de seguridad

Por motivos de seguridad, Zend_File_Transfer ya no almacena en su almacenamiento interno el tipo MIME y el tamaño de archivo originales proporcionados por el cliente que realiza la petición. En su lugar, los valores reales se detectarán en la inicialización.

Además, los valores originales dentro de $_FILES se sobrescribirán con los valores reales en la inicialización. Esto hace también que $_FILES sea seguro.

Cuando necesite los valores originales, puede almacenarlos antes de inicializar Zend_File_Transfer o usar la opción disableInfos en la inicialización. Tenga en cuenta que esta opción es inútil si se proporciona después de la inicialización.

B.2.3.2. Validación de conteo

Antes de la versión 1.10, el validador MimeType usaba una nomenclatura incorrecta. Por coherencia, se han cambiado las siguientes constantes:

Tabla B.1. Mensajes de validación modificados

Antigua Nueva Valor
TOO_MUCH TOO_MANY Too many files, maximum '%max%' are allowed but '%count%' are given
TOO_LESS TOO_FEW Too few files, minimum '%min%' are expected but '%count%' are given

Cuando traduzca estos mensajes en su código, use las nuevas constantes. Como beneficio, ya no necesita traducir la cadena original para obtener una ortografía correcta.

B.2.4. Zend_Filter_HtmlEntities

Para usar por defecto una codificación de caracteres más segura, Zend_Filter_HtmlEntities ahora utiliza por defecto UTF-8 en lugar de ISO-8859-1.

Además, dado que el mecanismo real trata con codificaciones de caracteres y no con conjuntos de caracteres, se han añadido dos nuevos métodos, setEncoding() y getEncoding(). Los métodos anteriores setCharSet() y setCharSet() ahora están obsoletos y delegan en los nuevos métodos. Por último, en lugar de usar directamente los miembros protegidos dentro del método filter(), estos miembros se recuperan a través de sus accesores explícitos. Si estaba extendiendo el filtro anteriormente, revise su código y sus pruebas unitarias para asegurarse de que todo sigue funcionando.

B.2.5. Zend_Filter_StripTags

Zend_Filter_StripTags contiene un indicador, commentsAllowed, que, en versiones anteriores, permitía incluir opcionalmente en una lista blanca los comentarios HTML en el texto HTML filtrado por la clase. Sin embargo, esto expone el código que habilita el indicador a ataques de XSS, particularmente en Internet Explorer (que permite especificar funcionalidad condicional mediante comentarios HTML). A partir de la versión 1.9.7 (y retroportado a las versiones 1.8.5 y 1.7.9), el indicador commentsAllowed ya no tiene ningún efecto, y todos los comentarios HTML, incluidos los que contienen otras etiquetas HTML o comentarios anidados, se eliminarán del resultado final del filtro.

B.2.6. Zend_Translate

B.2.6.1. Adaptador Xliff

Anteriormente el adaptador Xliff usaba la cadena de origen como Id de mensaje. Según el estándar Xliff, se debería usar el Id de trans-unit. Este comportamiento se corrigió con Zend Framework 1.10. Ahora el Id de trans-unit se usa como Id de mensaje por defecto.

Pero todavía puede obtener el comportamiento antiguo e incorrecto estableciendo la opción useId a FALSE.

$trans = new Zend_Translate(
    'xliff', '/path/to/source', $locale, array('useId' => false)
);

B.2.7. Zend_Validate

B.2.7.1. Validadores escritos por el usuario

Al establecer y devolver un error desde un validador escrito por el usuario, debe llamar al método _error(). Antes de Zend Framework 1.10 podía llamar a este método sin proporcionar ningún parámetro. En ese caso se usaba la primera plantilla de mensaje encontrada.

Este comportamiento es problemático cuando tiene validadores con más de un mensaje distinto que devolver. También al extender un validador existente puede obtener resultados inesperados. Esto podría llevar al problema de que su usuario no reciba el mensaje que usted esperaba.

My_Validator extends Zend_Validate_Abstract
{
    public isValid($value)
    {
        ...
        $this->_error(); // unexpected results between different OS
        ...
    }
}

Para evitar este problema, ya no se permite llamar al método _error() sin proporcionar un parámetro.

My_Validator extends Zend_Validate_Abstract
{
    public isValid($value)
    {
        ...
        $this->_error(self::MY_ERROR); // defined error, no unexpected results
        ...
    }
}

B.2.7.2. Simplificación en el validador de fechas

Antes de Zend Framework 1.10 se lanzaban 2 mensajes idénticos dentro del validador de fechas. Estos eran NOT_YYYY_MM_DD y FALSEFORMAT. A partir de Zend Framework 1.10 solo se devolverá el mensaje FALSEFORMAT cuando la fecha dada no coincida con el formato establecido.

B.2.7.3. Correcciones en los validadores Alpha, Alnum y Barcode

Antes de Zend Framework 1.10, los mensajes de los 2 adaptadores de código de barras, el Alpha y el validador Alnum eran idénticos. Esto introducía problemas al usar mensajes personalizados, traducciones o múltiples instancias de estos validadores.

A partir de Zend Framework 1.10, los valores de las constantes se cambiaron para que fueran únicos. Si usó las constantes tal como se propone en el manual, no hay ningún cambio para usted. Pero si usó el contenido de las constantes en su código, deberá cambiarlos. La siguiente tabla muestra los valores modificados:

Tabla B.2. Mensajes de validación disponibles

Validador Constante Valor
Alnum STRING_EMPTY alnumStringEmpty
Alpha STRING_EMPTY alphaStringEmpty
Barcode_Ean13 INVALID ean13Invalid
Barcode_Ean13 INVALID_LENGTH ean13InvalidLength
Barcode_UpcA INVALID upcaInvalid
Barcode_UpcA INVALID_LENGTH upcaInvalidLength
Digits STRING_EMPTY digitsStringEmpty