Al actualizar desde una versión anterior a Zend Framework 1.10 o superior debe tener en cuenta las siguientes notas de migración.
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:
// ...
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();
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.
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.
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.
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.
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)
);
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
...
}
}
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.
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 |