Al actualizar desde una versión anterior a Zend Framework 1.7 o superior debe tener en cuenta las siguientes notas de migración.
Los usuarios nos hicieron notar el hecho de que
Zend_Controller_Action_Helper_ViewRenderer estaba
utilizando un método de la clase abstracta del dispatcher que no estaba en
la interfaz del dispatcher. Ahora hemos añadido el siguiente método para
asegurar que los dispatchers personalizados sigan funcionando con las
implementaciones proporcionadas:
formatModuleName(): debe utilizarse para tomar un nombre de controlador en bruto, como el que se empaquetaría dentro de un objeto request, y reformatearlo a un nombre de clase apropiado que una clase que extienda deZend_Controller_Actionpueda usar
Como han hecho notar los usuarios, los validadores de Zend_File_Transfer
no funcionan en conjunto con Zend_Config debido a que
no utilizaban arrays con claves con nombre.
Por ello, todos los filtros y validadores de Zend_File_Transfer
han sido rediseñados. Aunque las firmas antiguas siguen funcionando,
han sido marcadas como obsoletas y emitirán un aviso de PHP
pidiéndole que las corrija.
La siguiente lista muestra los cambios que deberá realizar para el uso correcto de los parámetros.
API del método antiguo:
Zend_Filter_File_Rename($oldfile, $newfile, $overwrite)API del método nuevo:
Zend_Filter_File_Rename($options)donde$optionsacepta las siguientes claves de array: source equivale a$oldfile, target equivale a$newfile, overwrite equivale a$overwrite.
Ejemplo B.4. Cambios en el filtro rename de la 1.6 a la 1.7
// Example for 1.6
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addFilter('Rename',
array('/path/to/oldfile', '/path/to/newfile', true));
// Same example for 1.7
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addFilter('Rename',
array('source' => '/path/to/oldfile',
'target' => '/path/to/newfile',
'overwrite' => true));
API del método antiguo:
Zend_Validate_File_Count($min, $max)API del método nuevo:
Zend_Validate_File_Count($options)donde$optionsacepta las siguientes claves de array: min equivale a$min, max equivale a$max.
Ejemplo B.5. Cambios en el validador count de la 1.6 a la 1.7
// Example for 1.6
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addValidator('Count',
array(2, 3));
// Same example for 1.7
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addValidator('Count',
false,
array('min' => 2,
'max' => 3));
API del método antiguo:
Zend_Validate_File_Extension($extension, $case)API del método nuevo:
Zend_Validate_File_Extension($options)donde$optionsacepta las siguientes claves de array: * equivale a$extensiony puede tener cualquier otra clave, case equivale a$case.
Ejemplo B.6. Cambios en el validador extension de la 1.6 a la 1.7
// Example for 1.6
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addValidator('Extension',
array('jpg,gif,bmp', true));
// Same example for 1.7
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addValidator('Extension',
false,
array('extension1' => 'jpg,gif,bmp',
'case' => true));
API del método antiguo:
Zend_Validate_File_FilesSize($min, $max, $bytestring)API del método nuevo:
Zend_Validate_File_FilesSize($options)donde$optionsacepta las siguientes claves de array: min equivale a$min, max equivale a$max, bytestring equivale a$bytestring.
Adicionalmente, la firma del método useByteString()
ha cambiado. Ahora solo puede utilizarse para comprobar si el
validador espera utilizar cadenas de bytes en los mensajes
generados. Para establecer el valor del indicador, use el
método setUseByteString().
Ejemplo B.7. Cambios en el validador filessize de la 1.6 a la 1.7
// Example for 1.6
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addValidator('FilesSize',
array(100, 10000, true));
// Same example for 1.7
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addValidator('FilesSize',
false,
array('min' => 100,
'max' => 10000,
'bytestring' => true));
// Example for 1.6
$upload->useByteString(true); // set flag
// Same example for 1.7
$upload->setUseByteSting(true); // set flag
API del método antiguo:
Zend_Validate_File_Hash($hash, $algorithm)API del método nuevo:
Zend_Validate_File_Hash($options)donde$optionsacepta las siguientes claves de array: * equivale a$hashy puede tener cualquier otra clave, algorithm equivale a$algorithm.
Ejemplo B.8. Cambios en el validador hash de la 1.6 a la 1.7
// Example for 1.6
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addValidator('Hash',
array('12345', 'md5'));
// Same example for 1.7
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addValidator('Hash',
false,
array('hash1' => '12345',
'algorithm' => 'md5'));
API del método antiguo:
Zend_Validate_File_ImageSize($minwidth, $minheight, $maxwidth, $maxheight)API del método nuevo:
Zend_Validate_File_FilesSize($options)donde$optionsacepta las siguientes claves de array: minwidth equivale a$minwidth, maxwidth equivale a$maxwidth, minheight equivale a$minheight, maxheight equivale a$maxheight.
Ejemplo B.9. Cambios en el validador imagesize de la 1.6 a la 1.7
// Example for 1.6
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addValidator('ImageSize',
array(10, 10, 100, 100));
// Same example for 1.7
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addValidator('ImageSize',
false,
array('minwidth' => 10,
'minheight' => 10,
'maxwidth' => 100,
'maxheight' => 100));
API del método antiguo:
Zend_Validate_File_Size($min, $max, $bytestring)API del método nuevo:
Zend_Validate_File_Size($options)donde$optionsacepta las siguientes claves de array: min equivale a$min, max equivale a$max, bytestring equivale a$bytestring.
Ejemplo B.10. Cambios en el validador size de la 1.6 a la 1.7
// Example for 1.6
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addValidator('Size',
array(100, 10000, true));
// Same example for 1.7
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addValidator('Size',
false,
array('min' => 100,
'max' => 10000,
'bytestring' => true));
Según los estándares de codificación, isLocale() tuvo que ser
modificado para devolver un booleano. En versiones anteriores se devolvía una cadena en caso de
éxito. Para la versión 1.7 se ha añadido un modo de compatibilidad que permite usar
el antiguo comportamiento de devolver una cadena, pero que lanza un aviso al
usuario mencionando que debe cambiar al nuevo comportamiento. El reencaminamiento que el
antiguo comportamiento de isLocale() podía haber realizado ya no es
necesario, ya que todos los procesos de I18n ahora gestionarán el reencaminamiento por sí mismos.
Para migrar sus scripts a la nueva API, simplemente utilice el método como se muestra a continuación.
Ejemplo B.11. Cómo cambiar isLocale() de la 1.6 a la 1.7
// Example for 1.6
if ($locale = Zend_Locale::isLocale($locale)) {
// do something
}
// Same example for 1.7
// You should change the compatiblity mode to prevent user warnings
// But you can do this in your bootstrap
Zend_Locale::$compatibilityMode = false;
if (Zend_Locale::isLocale($locale)) {
}
Tenga en cuenta que puede usar el segundo parámetro para ver si el locale es correcto sin procesar un reencaminamiento.
// Example for 1.6
if ($locale = Zend_Locale::isLocale($locale, false)) {
// do something
}
// Same example for 1.7
// You should change the compatiblity mode to prevent user warnings
// But you can do this in your bootstrap
Zend_Locale::$compatibilityMode = false;
if (Zend_Locale::isLocale($locale, false)) {
if (Zend_Locale::isLocale($locale, true)) {
// no locale at all
}
// original string is no locale but can be rerouted
}
El significado del método getDefault() ha cambiado debido
a que hemos integrado un locale de framework que puede establecerse con
setDefault(). Ya no devuelve la cadena de locales,
sino únicamente el locale de framework establecido.
Para migrar sus scripts a la nueva API, simplemente utilice el método como se muestra a continuación.
Ejemplo B.12. Cómo cambiar getDefault() de la 1.6 a la 1.7
// Example for 1.6 $locales = $locale->getDefault(Zend_Locale::BROWSER); // Same example for 1.7 // You should change the compatiblity mode to prevent user warnings // But you can do this in your bootstrap Zend_Locale::$compatibilityMode = false; $locale = Zend_Locale::getOrder(Zend_Locale::BROWSER);
Tenga en cuenta que el segundo parámetro de la antigua implementación de
getDefault() ya no está disponible, pero los valores devueltos son los mismos.
![]() |
Nota |
|---|---|
Por defecto el comportamiento antiguo sigue activo, pero lanza un aviso al
usuario. Cuando haya modificado su código al nuevo comportamiento, también debería
cambiar el modo de compatibilidad a |
Al usar la detección automática de idiomas, o al establecer idiomas manualmente
en Zend_Translate, es posible que haya notado que de vez en
cuando se lanza un aviso sobre traducciones no añadidas o vacías. En algunas versiones
anteriores también se lanzaba una excepción en algunos casos.
La razón es que, cuando un usuario solicita un idioma que no existe, no tiene una forma sencilla de detectar qué está fallando. Por ello añadimos esos avisos que aparecen en su registro y le indican que el usuario solicitó un idioma que usted no soporta. Tenga en cuenta que el código, incluso cuando lanzamos dicho aviso, sigue funcionando sin problemas.
Pero cuando usa su propio manejador de errores o excepciones, como xdebug, obtendrá todos los avisos devueltos, aunque esa no fuera su intención. Esto se debe a que dichos manejadores anulan todas las configuraciones dentro de PHP.
Para deshacerse de estos avisos simplemente puede establecer la nueva opción
'disableNotices' a TRUE. Por defecto es
FALSE.
Ejemplo B.13. Establecer idiomas sin recibir avisos
Supongamos que tenemos disponible 'en' y nuestro usuario solicita 'fr', que no está en nuestro repertorio de idiomas traducidos.
$language = new Zend_Translate('gettext',
'/path/to/translations',
'auto');
En este caso obtendremos un aviso sobre un idioma no disponible 'fr'. Simplemente añada la opción y los avisos se deshabilitarán.
$language = new Zend_Translate('gettext',
'/path/to/translations',
'auto',
array('disableNotices' => true));
![]() |
Nota |
|---|---|
Los cambios de API dentro de |
Antes de la versión 1.7.5, el equipo de Zend Framework fue notificado de
una posible vulnerabilidad de Inclusión de Archivo Local (LFI) en el
método Zend_View::render(). Antes de la 1.7.5, el método
permitía, por defecto, la posibilidad de especificar scripts de vista que
incluyeran notación de directorio padre (por ejemplo, "../" o "..\"). Esto
abre la posibilidad de un ataque de LFI si se pasa entrada de usuario
sin filtrar al método render():
// Where $_GET['foobar'] = '../../../../etc/passwd' echo $view->render($_GET['foobar']); // LFI inclusion
Zend_View ahora, por defecto, lanza una excepción cuando se
solicita un script de vista de este tipo.
Dado que varios desarrolladores informaron que estaban usando dicha
notación dentro de sus aplicaciones que no era el
resultado de entrada de usuario, se creó un indicador especial para permitir
deshabilitar la protección por defecto. Tiene dos formas de hacerlo:
pasando la clave 'lfiProtectionOn' a las opciones del constructor, o
llamando explícitamente al método setLfiProtection().
// Disabling via constructor
$view = new Zend_View(array('lfiProtectionOn' => false));
// Disabling via exlicit method call:
$view = new Zend_View();
$view->setLfiProtection(false);
![[Note]](images/note.png)