The symfony Cookbook

Hoe kan je de Web Debug Toolbar aanpassen?

You are currently browsing
the website for symfony 1

Visit the Symfony2 website


About

You are currently reading "The symfony Cookbook" which is licensed under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License license.

Master symfony

Be trained by SensioLabs experts (2 to 6 day sessions -- French or English).
trainings.sensiolabs.com

Books on symfony

Learn more about symfony with the official guides.
books.sensiolabs.com

L'audit Qualité par SensioLabs

200 points de contrôle de votre applicatif web.
audit.sensiolabs.com

Chapter Content

De web debug toolbar

De toolbar aanpassen

Een paneel verwijderen

Vervangen of toevoegen van een paneel

Pak je panelen in als plugins

symfony training
Be trained by symfony experts
May 29: Paris (Web Development with Symfony2 - Français)
May 31: Paris (Mastering Symfony2 - Français)
Jun 06: Paris (Introduction to Symfony2 - Français)
Jun 06: Paris (Introduction to Symfony2 - English)
Jun 06: Paris (Going Further with Symfony2 - English)
and more...

Search


powered by google
You are currently browsing "The symfony Cookbook" in Dutch for the 1.2 version - Switch to version: - Switch to language:
Creative Commons License This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
Translation of this work into another language is explicitly allowed.
This version of symfony is not maintained anymore.
If some of your projects still use this version, consider upgrading as soon as possible.

De symfony web debug toolbar is een van de beste vrienden van een ontwikkelaar. Het is altijd makkelijk toegankelijk in de browser wanneer je werkt in een ontwikkelomgeving. Het geeft je alles wat je moet weten over de huidige pagina en maakt het makkelijk om je applicaties te debuggen. En het beste nieuws is dat je web debug toolbar volledig configurabel is.

De web debug toolbar

Zonder enige configuratie ziet de standaard toolbar er zo uit:

De standaard web debug toolbar

De toolbar bestaat uit verschillende panelen. Elke paneel bestaat uit een titel en een optioneel deel inhoud> Het paneel is eigenlijk een PHP object. Standaard zijn er zeven panelen:

Naam Class naam Representatie
symfony versie sfWebDebugPanelSymfonyVersion symfony version
cache informatie sfWebDebugPanelCache cache
configuratie sfWebDebugPanelConfig configuration
logs sfWebDebugPanelLogs logs
database informatie sfWebDebugPanelDatabase database
geheugen gebruik sfWebDebugPanelMemory memory
timer sfWebDebugPanelTimer timer

De toolbar aanpassen

Je kan de web debug toolbar aanpassen door te luisteren naar de debug.web.load_panels event in je applicatie of project configuratie bestand. De volgende code toont hoe je kan luisteren naar dit event in de frontend configuratie class:

<?php
 
class frontendConfiguration extends sfApplicationConfiguration
{
  public function configure()
  {
    // ...
 
    $this->dispatcher->connect('debug.web.load_panels', array($this, 'configureWebDebugToolbar'));
  }
}

Met deze configuratie aanwezig zal symfony automatisch de configureWebDebugToolbar() methode aanroepen wanneer het de web debug toolbar initialiseert. Deze methode kan vervolgens panelen toevoegen, vervangen of verwijderen.

Net als bij elke andere listener roept symfony de configureWebDebugToolbar() methode aan met een event als argument. Het onderwerp van het event is het web debug toolbar object dat we willen manipuleren:

<?php
 
class frontendConfiguration extends sfApplicationConfiguration
{
  public function configure()
  {
    $this->dispatcher->connect('debug.web.load_panels', array($this, 'configureWebDebugToolbar'));
  }
 
  public function configureWebDebugToolbar(sfEvent $event)
  {
    $webDebugToolbar = $event->getSubject();
  }
}

Een paneel verwijderen

Om een paneel te verwijderen, roep de removePanel() methode aan met de naam van het paneel:

<?php
 
class frontendConfiguration extends sfApplicationConfiguration
{
  // ...
 
  public function configureWebDebugToolbar(sfEvent $event)
  {
    $webDebugToolbar = $event->getSubject();
 
    $webDebugToolbar->removePanel('memory');
  }
}

Vervangen of toevoegen van een paneel

Om een paneel te vervangen, roep de setPanel() methode aan met de naam van een van de bestaande panelen.

Om een nieuw paneel toe te voegen, roep dezelfde setPanel() methode aan, maar met een unieke nieuwe naam.

Je kan natuurlijk de bestaande paneel classes extenden om informatie toe te voegen of te verwijderen, maar voor dit voorbeeld maken we een nieuw paneel die de javascript en stylesheet bestanden toont die in ons response object zijn geregistreerd:

<?php
 
class frontendConfiguration extends sfApplicationConfiguration
{
  // ...
 
  public function configureWebDebugToolbar(sfEvent $event)
  {
    $webDebugToolbar = $event->getSubject();
 
    $webDebugToolbar->setPanel('assets', new sfWebDebugPanelAssets($webDebugToolbar));
  }
}

We moeten hiervoor de sfWebDebugPanelAssets class maken. Alle paneel classes moeten de `sfWebDebugPanelz class extenden en in ieder geval de volgende drie abstracte methodes implementeren:

Met deze informatie in het achterhoofd, is hier het meest simpele paneel dat zal werken:

<?php
 
class sfWebDebugPanelAssets extends sfWebDebugPanel
{
  public function getTitle()
  {
    return 'assets';
  }
 
  public function getPanelTitle()
  {
    return 'Stylesheet and JavaScript files from sfWebResponse';
  }
 
  public function getPanelContent()
  {
    return null;
  }
}

Dit zal een nieuw assets paneel in de web debug toolbar toevoegen, maar de tekst is niet klikbaar omdat de inhoud van het paneel leeg is.

Laten we het wat interessanter maken door wat inhoud toe te voegen aan het paneel. Het response object heeft twee methodes, getJavascripts() en getStylesheets(), en deze methodes geven een array van javascript en stylesheets terug die door het response object worden geinclude.

De getPanelContent() methode itereert over deze twee arrays om de paneel inhoud op te bouwen, en geeft deze terug als een HTML string:

<?php
 
class sfWebDebugPanelAssets extends sfWebDebugPanel
{
  // ...
 
  public function getPanelContent()
  {
    $response = sfContext::getInstance()->getResponse();
    $html = '';
 
    if ($stylesheets = $response->getStylesheets())
    {
      $html .= '<h2>Stylesheets</h2><ul>';
      foreach ($stylesheets as $file => $options)
      {
        $html .= sprintf('<li><strong>%s</strong> %s</li>', stylesheet_path($file), count($options) ? '('.var_export($options, true).')' : '');;
      }
      $html .= '</ul>';
    }
 
    if ($javascripts = $response->getJavascripts())
    {
      $html .= '<h2>Javascripts</h2><ul>';
      foreach ($javascripts as $file => $options)
      {
        $html .= sprintf('<li><strong>%s</strong> %s</li>', javascript_path($file), count($options) ? '('.var_export($options, true).')' : '');;
      }
      $html .= '</ul>';
    }
 
    return $html;
  }
}

Hier is het resultaat op een symfony pagina:

De aangepaste web debug toolbar

Pak je panelen in als plugins

Je kan je nieuwe panelen zelfs als symfony plugin inpakken en distribueren.

Wanneer een gebruiker je plugin installeert, kan je hem vragen zijn configuratie class aan te passen om de event listener toe te voegen zoals we hierboven hebben gedaan, maar je kan ook in je plugin aansluiten op het web.debug.load_panels event in een config.php bestand zoals deze:

<?php
 
// ...
 
require_once '/path/to/sfWebDebugPanelAssets';
 
$this->dispatcher->connect('debug.web.load_panels', array('sfWebDebugPanelAssets', 'listenToAddPanelEvent'));

Voeg vervolgens de listenToAddPanelEvent() methode toe aan je sfWebDebugPanelAssets class:

class sfWebDebugPanelAssets extends sfWebDebugPanel
{
  static public function listenToAddPanelEvent(sfEvent $event)
  {
    $event->getSubject()->setPanel('assets', new sfWebDebugPanelAssets($event->getSubject()));
  }
}

Op die manier zal je paneel automatisch toegevoegd worden aan de web debug toolbar zonder enige aanpassing door de developer.

Dat is alles wat er is. Met dank aan de nieuwe web.debug.load_panels event kan je nu zelf de web debug toolbar aanpassen zoals je wilt. Als je meer informatie wil of nieuwe trucjes wil leren, kan je de code bekijken van de ingebouwde panelen.

Questions & Feedback

If you find a typo or an error, please register and open a ticket.

If you need support or have a technical question, please post to the official user mailing-list.