Una vez creado e incluido el panel de depuración web a la barra, su contenido
se puede añadir fácilmente mediante el método getPanelContent()
. Symfony
proporciona varios métodos para facilitar la creación de contenido avanzado y
usable.
7.3.1. sfWebDebugPanel::setStatus()
Por defecto todos los paneles de la barra de depuración web muestran un color de fondo gris. Si se quiere llamar la atención sobre algún contenido del panel, su fondo se puede mostrar de color naranja o rojo.
Para modificar el color de fondo del panel se emplea el método setStatus()
.
Este método acepta cualquier constante de prioridad definida por la clase
sfLogger. En concreto se han
definido tres niveles de estado diferentes que se corresponden con los tres
colores de fondo de los paneles (gris, naranja y rojo). Normalmente el método
setStatus()
se invoca desde el método getPanelContent()
cuando se cumple
alguna condición que merece una atención especial.
public function getPanelContent()
{
// ...
// mostrar el fondo gris (valor por defecto)
$this->setStatus(sfLogger::INFO);
// mostrar el fondo naranja
$this->setStatus(sfLogger::WARNING);
// mostrar el fondo rojo
$this->setStatus(sfLogger::ERR);
}
7.3.2. sfWebDebugPanel::getToggler()
Uno de los elementos más comunes de los paneles de depuración web existentes es el toggler o alternador, un pequeño elemento con forma de flecha que muestra u oculta alternativamente cierto contenido cuando se pincha sobre él.
Esta funcionalidad se puede incluir fácilmente en un panel propio mediante
la función getToggler()
. Si por ejemplo se quiere alternar en el panel el
contenido de una lista:
public function getPanelContent()
{
$contenidoLista = '<ul id="debug_documentation_list" style="display: none;">
<li>Elemento 1</li>
<li>Elemento 2</li>
</ul>';
$toggler = $this->getToggler('debug_documentation_list', 'Muestra/oculta lista');
return sprintf('<h3>Elementos de la lista %s</h3>%s', $toggler, $contenidoLista);
}
El método getToggler
requiere dos argumentos: el valor del atributo id
del
elemento DOM que se va a alternar y el título que se va a incluir como valor
del atributo title
del enlace asociado con el toggler. Obviamente debes
crear el elemento DOM con ese atributo id
y también tienes que crear todo
el contenido que se va a mostrar/ocultar con el alternador.
7.3.3. sfWebDebugPanel::getToggleableDebugStack()
Este método es similar a getToggler()
, ya que muestra una pequeña flecha que
muestra u oculta alternativamente cierto contenido. En este caso, el contenido
es el de una traza de depuración. Una de sus principales utilidades es la de
mostrar los mensajes de log de una clase propia. Si suponemos que una clase
llamada myCustomClass
genera mensajes de log propios:
class myCustomClass
{
public function doSomething()
{
$dispatcher = sfApplicationConfiguration::getActive()
->getEventDispatcher();
$dispatcher->notify(new sfEvent($this, 'application.log', array(
'priority' => sfLogger::INFO,
'Begin execution of myCustomClass::doSomething()',
)));
}
}
El siguiente ejemplo muestra la lista de todos los mensajes de log de la clase
myCustomClass
junto con la traza de depuración de cada uno.
public function getPanelContent()
{
// obtiene todos los mensajes de log de la petición actual
$logs = $this->webDebug->getLogger()->getLogs();
$listadoLogs = '';
foreach ($logs as $log)
{
if ($log['type'] == 'myCustomClass')
{
$listadoLogs .= sprintf('<li>%s %s</li>',
$log['message'],
$this->getToggleableDebugStack($log['debug_backtrace'])
);
}
}
return sprintf('<ul>%s</ul>', $listadoLogs);
}
Nota Aunque no se cree un panel propio, los mensajes de log de la clase myCustomClass
se pueden ver en el panel de mensajes de log. La ventaja de esta técnica es que
se puede mostrar solamente un subconjunto pequeño de los mensajes de log y
además controlar la forma en la que se muestran.
7.3.4. sfWebDebugPanel::formatFileLink()
Una de las novedades de Symfony 1.3 es que se puede pinchar sobre el nombre de un archivo en la barra de depuración web para abrirlo con nuestro editor de texto favorito. Puedes obtener más información en el artículo "What's new" de Symfony 1.3.
Para hacer uso de esta característica para cualquier archivo, se emplea el
método formatFileLink()
. Además del propio archivo, se puede enlazar a una
línea concreta. El código del siguiente ejemplo crea un enlace que abre el
archivo config/ProjectConfiguration.class.php
y posiciona el editor de
texto en la línea 15:
public function getPanelContent()
{
$contenido = '';
// ...
$ruta = sfConfig::get('sf_config_dir') . '/ProjectConfiguration.class.php';
$contenido .= $this->formatFileLink($path, 15, 'Configuración del proyecto');
return $contenido;
}
Tanto el segundo argumento (número de línea) como el tercero (el texto del enlace) son opcionales. Si no se indica el tercer argumento, el texto del enlace es la propia ruta del archivo.
Nota Antes de probar el ejemplo anterior, asegúrate de haber configurado la nueva
opción de enlazar archivos. Esta opción se configura mediante la clave
sf_file_link_format
del archivo de configuración settings.yml
o mediante
la opción file_link_format
de xdebug.
La última forma asegura que el proyecto no sea dependiente de un IDE específico.