Erstellung von Erweiterungen für Tracy
Tracy bietet ein großartiges Werkzeug zum Debuggen Ihrer Anwendung. Manchmal möchten Sie jedoch auch einige zusätzliche Informationen zur Hand haben. Wir zeigen Ihnen, wie Sie Ihre eigenen Erweiterungen für die Tracy Bar schreiben, um die Entwicklung noch angenehmer zu gestalten.
- Erstellung eines eigenen Panels für die Tracy Bar
- Erstellung einer eigenen Erweiterung für den Bluescreen
Ein Repository mit fertigen Erweiterungen für Tracy finden Sie auf “Componette”.
Erweiterungen für die Tracy Bar
Eine neue Erweiterung für die Tracy Bar zu erstellen ist nicht kompliziert. Sie erstellen ein Objekt, das das Interface
Tracy\IBarPanel
implementiert, welches zwei Methoden getTab()
und getPanel()
hat. Die
Methoden müssen den HTML-Code des Tabs (eine kleine Beschriftung, die direkt auf der Bar angezeigt wird) und des Panels
zurückgeben. Wenn getPanel()
nichts zurückgibt, wird nur die Beschriftung selbst angezeigt. Wenn
getTab()
nichts zurückgibt, wird gar nichts angezeigt und getPanel()
wird auch nicht mehr
aufgerufen.
class ExamplePanel implements Tracy\IBarPanel
{
public function getTab()
{
return /* ... */;
}
public function getPanel()
{
return /* ... */;
}
}
Registrierung
Die Registrierung erfolgt über Tracy\Bar::addPanel()
:
Tracy\Debugger::getBar()->addPanel(new ExamplePanel);
Oder Sie können das Panel direkt in der Anwendungskonfiguration registrieren:
tracy:
bar:
- ExamplePanel
HTML-Code des Tabs
Er sollte ungefähr so aussehen:
<span title="Erläuternde Beschriftung">
<svg>...</svg>
<span class="tracy-label">Titel</span>
</span>
Das Bild sollte im SVG-Format sein. Wenn keine erläuternde Beschriftung benötigt wird, kann <span>
weggelassen werden.
HTML-Code des Panels
Er sollte ungefähr so aussehen:
<h1>Titel</h1>
<div class="tracy-inner">
<div class="tracy-inner-container">
... Inhalt ...
</div>
</div>
Der Titel sollte entweder derselbe sein wie der Titel des Tabs oder er kann zusätzliche Daten enthalten.
Es muss berücksichtigt werden, dass eine Erweiterung auch mehrmals registriert werden kann, beispielsweise mit
unterschiedlichen Einstellungen. Daher können für das Styling keine CSS-IDs verwendet werden, sondern nur Klassen, und zwar in
der Form tracy-addons-<Klassenname>[-<optional>]
. Die Klasse schreiben Sie dann zusammen mit der Klasse
tracy-inner
in das Div. Beim Schreiben von CSS ist es nützlich, #tracy-debug .klasse
zu schreiben, da
die Regel dann eine höhere Priorität als der Reset hat.
Standardstile
Im Panel sind <a>
, <table>
, <pre>
, <code>
vordefiniert. Wenn Sie einen Link erstellen möchten, der ein anderes Element verbirgt und anzeigt, verbinden Sie sie über die
Attribute href
und id
sowie die Klasse tracy-toggle
:
<a href="#tracy-addons-Klassenname-{$counter}" class="tracy-toggle">Details</a>
<div id="tracy-addons-Klassenname-{$counter}">...</div>
Wenn der Standardzustand eingeklappt sein soll, fügen Sie beiden Elementen die Klasse tracy-collapsed
hinzu.
Verwenden Sie einen statischen Zähler, damit keine doppelten IDs auf derselben Seite erstellt werden.
Erweiterungen für den Bluescreen
Auf diese Weise können benutzerdefinierte Visualisierungen von Ausnahmen oder Panels hinzugefügt werden, die im Bluescreen angezeigt werden.
Die Erweiterung wird mit diesem Befehl erstellt:
Tracy\Debugger::getBlueScreen()->addPanel(function (?Throwable $e) { // abgefangene Ausnahme
return [
'tab' => '...Beschriftung...',
'panel' => '...HTML-Code des Panels...',
];
});
Die Funktion wird zweimal aufgerufen. Zuerst wird im Parameter $e
die Ausnahme selbst übergeben, und das
zurückgegebene Panel wird am Anfang der Seite gerendert. Wenn nichts zurückgegeben wird, wird das Panel nicht gerendert. Danach
wird sie mit dem Parameter null
aufgerufen, und das zurückgegebene Panel wird unter dem Callstack gerendert. Wenn
die Funktion im Array den Schlüssel 'bottom' => true
zurückgibt, wird das Panel ganz unten gerendert.