Más con Symfony

7.1. Creando un nuevo panel de depuración web

Los elementos que forman la barra de depuración web se denominan paneles de depuración web y son unas clases especiales que heredan de la clase sfWebDebugPanel class. En realidad, crear un nuevo panel es muy sencillo. Crea un nuevo archivo llamado sfWebDebugPanelDocumentation.class.php en el directorio lib/debug/ de tu proyecto (el directorio no existe y por tanto tienes que crearlo):

// lib/debug/sfWebDebugPanelDocumentation.class.php
class acWebDebugPanelDocumentation extends sfWebDebugPanel
{
  public function getTitle()
  {
    return '<img src="/images/documentation.png" alt="Documentation Shortcuts" height="16" width="16" /> docs';
  }

  public function getPanelTitle()
  {
    return 'Documentation';
  }

  public function getPanelContent()
  {
    $content = 'Placeholder Panel Content';

    return $content;
  }
}

Como mínimo todos los paneles deben implementar los métodos getTitle(), getPanelTitle() y getPanelContent().

  • sfWebDebugPanel::getTitle(): determina cómo se muestra inicialmente el panel en la barra de depuración web. Al igual que la mayoría de paneles, el panel que estamos creando se va a mostrar mediante un pequeño icono y un nombre corto.
  • sfWebDebugPanel::getPanelTitle(): su valor se muestra en la parte superior del contenido del panel mediante una etiqueta <h1>. También se utiliza como valor del atributo title del enlace que encierra el icono de la barra, por lo que no puede incluir ningún tipo de código HTML.
  • sfWebDebugPanel::getPanelContent(): genera el contenido HTML que se muestra al pulsar sobre el icono del panel.

El último paso que falta consiste en notificar a la aplicación que se quiere incluir un nuevo panel en la barra. Para ello, añade un nuevo listener para el evento debug.web.load_panels, que se notifica cuando la barra de depuración obtiene los paneles que se van a mostrar. En primer lugar, modificar el archivo config/ProjectConfiguration.class.php para escuchar ese evento:

// config/ProjectConfiguration.class.php
public function setup()
{
  // ...

  $this->dispatcher->connect('debug.web.load_panels', array(
    'acWebDebugPanelDocumentation',
    'listenToLoadDebugWebPanelEvent'
  ));
}

A continuación, añade la función listenToLoadDebugWebPanelEvent() del listener a la clase acWebDebugPanelDocumentation.class.php para incluir el panel en la barra:

// lib/debug/sfWebDebugPanelDocumentation.class.php
public static function listenToLoadDebugWebPanelEvent(sfEvent $event)
{
  $event->getSubject()->setPanel(
    'documentation',
    new self($event->getSubject())
  );
}

¡Y eso es todo! Refresca la página para ver el resultado de forma inmediata.

Barra de depuración web

Figura 7.2 Barra de depuración web

Nota Desde Symfony 1.3, es posible utilizar en la URL un parámetro llamado sfWebDebugPanel para mostrar desplegado un determinado panel web al cargar la página. Si por ejemplo se añade ?sfWebDebugPanel=documentation al final de la URL, se abrirá automáticamente el panel que se acaba de crear. Esta característica puede ser muy útil cuando se crean paneles propios.