Barra de depuración web
sfWebDebugPanel::setStatus()
Los paneles de la barra de depuración web pueden indicar su estado para que se modifique el color de fondo de su nombre. Si por ejemplo el panel de mensajes de log incluye algún mensaje con más prioridad que sfLogger::INFO, se modifica el color de fondo de su nombre en la barra de depuración web.
Parámetros de la petición en sfWebDebugPanel
Si quieres que se muestre abierto un panel de la barra de depuración web al cargar la página, puedes añadir un parámetro llamado sfWebDebugPanel en la URL. Si añades por ejemplo ?sfWebDebugPanel=config, al cargar la página se muestra desplegado el panel de configuración de la barra de depuración web.
Los paneles también pueden hacer uso de los parámetros de la petición accediendo a ellos a través de la opción request_parameters:
$parametrosPeticion = $this->webDebug->getOption('request_parameters');
Elementos parciales
Mejoras en los slots
Los helpers get_slot() y include_slot() ahora aceptan un segundo parámetro que especifica el contenido por defecto del slot si no se especifica otro contenido:
<?php echo get_slot('variable', 'valor') // muestra 'valor' si el slot 'variable' no está definido ?> <?php include_slot('variable', 'valor') // muestra 'valor' si el slot 'variable' no está definido ?>
Paginadores
Los métodos sfDoctrinePager y sfPropelPager ahora implementan las interfaces Iterator y Countable.
<?php if (count($paginador)): ?> <ul> <?php foreach ($paginador as $articulo): ?> <li><?php echo link_to($articulo->getTitulo(), 'articulo_ver', $articulo) ?></li> <?php endforeach; ?> </ul> <?php else: ?> <p>Sin resultados.</p> <?php endif; ?>
La cache de la vista
El gestor de la cache de la vista ahora acepta parámetros en el archivo de configuración factories.yml. Se ha refactorizado la generación de la clave de cache de la vista para facilitar la extensión de esta clase.
El archivo factories.yml permite el uso de dos parámetros:
cache_key_use_vary_headers(valor por defecto:true): indica si las claves de la cache deben incluir la parte de la cabeceras HTTP de tipoVary. En otras palabras, indica si la cache de la página es dependiente de las cabeceras HTTP, tal y como se especifica en el parámetrovaryde la cache.cache_key_use_host_name(valor por defecto:true): indica si las claves de la cache deben incluir la parte del nombre del host. En otras palabras, indica si la cache de la página es dependiente del hostname.
Guarda más elementos en la cache
El gestor de la cache de la vista ya no impide que se guarden en la cache las páginas que contienen valores en los arrays $_GET o $_POST. Ahora la lógica simplemente comprueba si la petición actual es de tipo GET antes de comprobar el archivo de configuración cache.yml. Esto significa que páginas como las siguientes ahora si que se guardan en la cache:
/js/mi_javascript_compilado.js?cachebuster123/usuarios?page=3
Petición
getContent()
El contenido de la petición ahora está accesible a través del método getContent().
Parámetros de PUT y DELETE
Cuando se recibe una petición HTTP con el método PUT o DELETE y con un Content-Type igual a application/x-www-form-urlencoded, Symfony ahora procesa su contenido original para que los parámetros enviados se puedan acceder como si fueran parámetros normales de una petición POST.
Acciones
redirect()
La familia de métodos sfAction::redirect() ahora es compatible con el formato introducido por el método url_for() en Symfony 1.2:
// En Symfony 1.2 $this->redirect(array('sf_route' => 'articulo_ver', 'sf_subject' => $articulo)); // En Symfony 1.3/1.4 $this->redirect('articulo_ver', $articulo);
Esta mejora también se ha aplicado a los métodos redirectIf() y redirectUnless().
Helpers
link_to_if() y link_to_unless()
Los helpers link_to_if() y link_to_unless() ahora son compatibles con el formato introducido por el helper link_to() en Symfony 1.2:
// En Symfony 1.2 <?php echo link_to_unless($variable, '@articulo_ver?id='.$articulo->getId()) ?> // En Symfony 1.3/1.4 <?php echo link_to_unless($variable, 'articulo_ver', $articulo) ?>
Contexto
Ahora puedes suscribirte al evento context.method_not_found para añadir métodos a sfContext de forma dinámica. Esto es útil si utilizas una factoría de tipo “lazy-loading”, por ejemplo en un plugin.
class myContextListener { protected $factory = null; public function listenForMethodNotFound(sfEvent $event) { $context = $event->getSubject(); if ('getLazyLoadingFactory' == $event['method']) { if (null === $this->factory) { $this->factory = new myLazyLoadingFactory($context->getEventDispatcher()); } $event->setReturnValue($this->factory); return true; } } }