Création d'extensions pour Tracy
Tracy fournit un excellent outil pour déboguer votre application. Parfois, cependant, vous aimeriez avoir quelques informations supplémentaires à portée de main. Nous allons vous montrer comment écrire votre propre extension pour la barre Tracy afin de rendre le développement encore plus agréable.
- Création de votre propre panneau pour la barre Tracy
- Création de votre propre extension pour Bluescreen
Vous trouverez le dépôt des extensions Tracy prêtes à l'emploi sur Componette.
Extensions pour la barre Tracy
Créer une nouvelle extension pour la barre Tracy n'est pas compliqué. Vous créez un objet implémentant l'interface
Tracy\IBarPanel
, qui a deux méthodes getTab()
et getPanel()
. Les méthodes doivent
retourner le code HTML de l'onglet (une petite étiquette affichée directement sur la barre) et du panneau. Si
getPanel()
ne retourne rien, seule l'étiquette elle-même sera affichée. Si getTab()
ne retourne rien,
rien ne sera affiché du tout et getPanel() ne sera même pas appelé.
class ExamplePanel implements Tracy\IBarPanel
{
public function getTab()
{
return /* ... */;
}
public function getPanel()
{
return /* ... */;
}
}
Enregistrement
L'enregistrement se fait via Tracy\Bar::addPanel()
:
Tracy\Debugger::getBar()->addPanel(new ExamplePanel);
Ou vous pouvez enregistrer le panneau directement dans la configuration de l'application :
tracy:
bar:
- ExamplePanel
Code HTML de l'onglet
Il devrait ressembler approximativement à ceci :
<span title="Description explicative">
<svg>...</svg>
<span class="tracy-label">Titre</span>
</span>
L'image doit être au format SVG. Si la description explicative n'est pas nécessaire, le <span>
peut
être omis.
Code HTML du panneau
Il devrait ressembler approximativement à ceci :
<h1>Titre</h1>
<div class="tracy-inner">
<div class="tracy-inner-container">
... contenu ...
</div>
</div>
Le titre doit être soit le même que le titre de l'onglet, soit il peut contenir des informations supplémentaires.
Il faut tenir compte du fait qu'une même extension peut être enregistrée plusieurs fois, par exemple avec des paramètres
différents, il n'est donc pas possible d'utiliser des ID CSS pour le style, mais seulement des classes, et ce sous la forme
tracy-addons-<NomDeLaClasse>[-<optionnel>]
. Écrivez ensuite la classe dans le div avec la classe
tracy-inner
. Lors de l'écriture du CSS, il est utile d'écrire #tracy-debug .classe
, car la règle a
alors une priorité plus élevée que le reset.
Styles par défaut
Dans le panneau, <a>
, <table>
, <pre>
, <code>
sont
pré-stylés. Si vous souhaitez créer un lien qui masque et affiche un autre élément, liez-les avec les attributs
href
et id
et la classe tracy-toggle
:
<a href="#tracy-addons-NomDeLaClasse-{$counter}" class="tracy-toggle">Détails</a>
<div id="tracy-addons-NomDeLaClasse-{$counter}">...</div>
Si l'état par défaut doit être réduit, ajoutez la classe tracy-collapsed
aux deux éléments.
Utilisez un compteur statique pour éviter de créer des ID en double sur une même page.
Extensions pour Bluescreen
De cette manière, il est possible d'ajouter des visualisations personnalisées d'exceptions ou des panneaux qui s'afficheront sur le bluescreen.
L'extension est créée avec cette instruction :
Tracy\Debugger::getBlueScreen()->addPanel(function (?Throwable $e) { // exception interceptée
return [
'tab' => '...Étiquette...',
'panel' => '...Code HTML du panneau...',
];
});
La fonction est appelée deux fois, d'abord l'exception elle-même est passée dans le paramètre $e
et le panneau
retourné est affiché au début de la page. S'il ne retourne rien, le panneau n'est pas affiché. Ensuite, elle est appelée avec
le paramètre null
et le panneau retourné est affiché sous la pile d'appels (callstack). Si la fonction retourne la
clé 'bottom' => true
dans le tableau, le panneau est affiché tout en bas.