Más con Symfony

7.4. Otros trucos de la barra de depuración web

Normalmente lo mejor de tu panel de depuración web será el contenido que muestres y la forma en la que lo hagas. No obstante, existen algunos otros trucos interesantes.

7.4.1. Eliminar los paneles por defecto

Por defecto Symfony muestra varios paneles en la barra de depuración web. Si no quieres mostrar alguno de ellos, debes hacer uso del evento debug.web.load_panels. Utiliza la misma función listener de las secciones anteriores, elimina todo su contenido y añade la siguiente función removePanel(). El código del siguiente ejemplo hace que no se muestre el panel con la información sobre la memoria:

public static function listenToLoadDebugWebPanelEvent(sfEvent $event)
{
  $event->getSubject()->removePanel('memory');
}

7.4.2. Obteniendo parámetros de la petición en un panel

Una de las cosas que más utilizan los paneles de depuración web son los parámetros de la petición. El siguiente código muestra cómo obtener el parámetro event_id para realizar una consulta a la base de datos y así poder mostrar la información de un determinado objeto:

$parametros = $this->webDebug->getOption('request_parameters');
if (isset($parametros['event_id']))
{
  $objeto = Doctrine::getTable('Event')->find($parametros['event_id']);
}

7.4.3. Ocultar un panel cuando no sea necesario

En determinadas ocasiones, los paneles no tienen ningún tipo de información relevante que mostrar para la petición actual. En estos casos es mejor ocultar directamente el panel. Supongamos que en el ejemplo anterior el panel no muestra información útil a menos que exista un parámetro de la petición llamado event_id. Para ocultar ese panel cuando no exista ese parámetro, simplemente no se devuelve ningún contenido en el método getTitle():

public function getTitle()
{
  $parametros = $this->webDebug->getOption('request_parameters');
  if (!isset($parametros['event_id']))
  {
    return;
  }

  return '<img src="/acWebDebugPlugin/images/documentation.png" alt="Documentation Shortcuts" height="16" width="16" /> docs';
}