Objectif

Le composant Zend_Db_Profiler du Zend Framework permet de profiler les requêtes exécutées sur la base de données d’une application.

On obtient ainsi pour chaque page la liste des requêtes ainsi que leurs temps d’exécution respectifs, et ceci sans avoir à ajouter une ligne de code aux classes inspectées.

Le profileur spécialisé Zend_Db_Profiler_Firebug propose quand à lui d’envoyer ces informations directement dans la console de Firebug.

Voyons ici comment le mettre en place dans le bootstrap afin de profiler nos requêtes.

Pré-requis

  • ZF, version supérieure à 1.6 (ici la version 1.9.4) ;
  • Firefox, version 2 ou 3 ;
  • Extension Firefox Firebug ;
  • Extension Firefox FirePHP.

Mise en place

Pour la suite, on supposera que votre application définie sa connexion à la base de données via un fichier de configuration du type mon_projet/application/configs/application.ini :

[production]
...
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
...
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.username = "user"
resources.db.params.password = "password"
resources.db.params.dbname = "dbname"
[testing : production]
...
[development : production]
...

Votre fichier /mon_projet/public/index.php utilise un bootstrap pour initialiser l’application avant de dispatcher les requêtes HTTP :

...
require_once 'Zend/Application.php';  
$application = new Zend_Application(APPLICATION_ENV,
                                    APPLICATION_PATH.'/configs/application.ini');
$application->bootstrap()->run();
...

Enfin, voici comment définir l’utilisation du profileur Firebug au moment de l’initialisation de l’adapteur à la base de données dans mon_projet/application/Bootstrap.php :

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    ....
    /**
     * Configurer l'adapteur à la base de données
     * @return Zend_Application_Resource_Db
     */ 
    protected function _initDb() {
        $db = $this->getPluginResource('db');
        if (APPLICATION_ENV == 'development') {
            $profiler = new Zend_Db_Profiler_Firebug('Toutes les requêtes');
            $profiler->setEnabled(true);
            $db->getDbAdapter()->setProfiler($profiler);
        }
        Zend_Db_Table_Abstract::setDefaultAdapter($db->getDbAdapter());
        return $db;
    }
    ....
}

Désormais, chaque requête exécutée sur l’environnement de développement sera profilée.

Il ne reste plus qu’à autoriser votre site à échanger des informations avec FirePHP :

  • Se rendre sur l’onglet console de FireBug et l’activer ;
  • Ajouter l’hôte via le menu de FirePHP > Allowed Sites ; menu-firephp

Pour tester, chargeons une page dont la construction nécessite l’exécution de requêtes :

logguer-requetes-sql-avec-zend-db-profiler-firebug

Pour aller plus loin

Zend_Db_Profiler permet également de filtrer les requêtes logguées par leur temps d’exécution ou encore par leur type (select, insert, etc), pour se faire, se référer à la documentation du composant.

Ressources complémentaires

Mots-clefs: , ,

Laisser une réponse

Vous pouvez utiliser ces mots-clés: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">