Δημιουργία επεκτάσεων για την Tracy

Η Tracy παρέχει ένα εξαιρετικό εργαλείο για τον εντοπισμό σφαλμάτων της εφαρμογής σας. Μερικές φορές, όμως, θα θέλατε να έχετε εύκαιρες και κάποιες άλλες πληροφορίες. Θα δείξουμε πώς να γράψετε τις δικές σας επεκτάσεις για το Tracy Bar, ώστε η ανάπτυξη να γίνει ακόμα πιο ευχάριστη.

  • Δημιουργία προσαρμοσμένου πάνελ για το Tracy Bar
  • Δημιουργία προσαρμοσμένης επέκτασης για το Bluescreen

Μπορείτε να βρείτε ένα αποθετήριο έτοιμων επεκτάσεων για την Tracy στο Componette.

Επεκτάσεις για το Tracy Bar

Η δημιουργία μιας νέας επέκτασης για το Tracy Bar δεν είναι καθόλου πολύπλοκη. Δημιουργείτε ένα αντικείμενο που υλοποιεί το interface Tracy\IBarPanel, το οποίο έχει δύο μεθόδους getTab() και getPanel(). Οι μέθοδοι πρέπει να επιστρέψουν τον κώδικα HTML της καρτέλας (μια μικρή ετικέτα που εμφανίζεται απευθείας στο Bar) και του πάνελ. Αν η getPanel() δεν επιστρέψει τίποτα, εμφανίζεται μόνο η ίδια η ετικέτα. Αν η getTab() δεν επιστρέψει τίποτα, δεν εμφανίζεται τίποτα απολύτως και ούτε η getPanel() καλείται πλέον.

class ExamplePanel implements Tracy\IBarPanel
{
	public function getTab()
	{
		return /* ... */;
	}

	public function getPanel()
	{
		return /* ... */;
	}
}

Εγγραφή

Η εγγραφή πραγματοποιείται με τη χρήση της Tracy\Bar::addPanel():

Tracy\Debugger::getBar()->addPanel(new ExamplePanel);

Ή μπορείτε να εγγράψετε το πάνελ απευθείας στη διαμόρφωση της εφαρμογής:

tracy:
	bar:
		- ExamplePanel

Κώδικας HTML της καρτέλας

Θα πρέπει να μοιάζει περίπου έτσι:

<span title="Επεξηγηματική ετικέτα">
	<svg>...</svg>
	<span class="tracy-label">Τίτλος</span>
</span>

Η εικόνα θα πρέπει να είναι σε μορφή SVG. Αν δεν χρειάζεται επεξηγηματική ετικέτα, το <span> μπορεί να παραλειφθεί.

Κώδικας HTML του πάνελ

Θα πρέπει να μοιάζει περίπου έτσι:

<h1>Τίτλος</h1>

<div class="tracy-inner">
<div class="tracy-inner-container">
	... περιεχόμενο ...
</div>
</div>

Ο τίτλος θα πρέπει να είναι είτε ο ίδιος με τον τίτλο της καρτέλας, είτε μπορεί να περιέχει πρόσθετα δεδομένα.

Πρέπει να λάβετε υπόψη ότι μια επέκταση μπορεί να εγγραφεί πολλές φορές, για παράδειγμα με διαφορετικές ρυθμίσεις, οπότε για το styling δεν μπορείτε να χρησιμοποιήσετε CSS id, αλλά μόνο class, και μάλιστα με τη μορφή tracy-addons-<NazevTridy>[-<volitelné>]. Στη συνέχεια, γράψτε την κλάση στο div μαζί με την κλάση tracy-inner. Κατά τη συγγραφή CSS, είναι χρήσιμο να γράφετε #tracy-debug .trida, επειδή ο κανόνας τότε έχει υψηλότερη προτεραιότητα από το reset.

Προεπιλεγμένα στυλ

Στο πάνελ είναι προ-στυλιζαρισμένα τα <a>, <table>, <pre>, <code>. Αν θέλετε να δημιουργήσετε έναν σύνδεσμο που κρύβει και εμφανίζει ένα άλλο στοιχείο, συνδέστε τα με τα χαρακτηριστικά href και id και την κλάση tracy-toggle:

<a href="#tracy-addons-NazevTridy-{$counter}" class="tracy-toggle">Λεπτομέρειες</a>

<div id="tracy-addons-NazevTridy-{$counter}">...</div>

Αν η προεπιλεγμένη κατάσταση πρέπει να είναι συμπτυγμένη, προσθέστε και στα δύο στοιχεία την κλάση tracy-collapsed.

Χρησιμοποιήστε έναν στατικό counter, ώστε να μην δημιουργούνται διπλότυπα ID στην ίδια σελίδα.

Επεκτάσεις για το Bluescreen

Με αυτόν τον τρόπο μπορείτε να προσθέσετε προσαρμοσμένες οπτικοποιήσεις εξαιρέσεων ή πάνελ που θα εμφανίζονται στο bluescreen.

Η επέκταση δημιουργείται με αυτήν την εντολή:

Tracy\Debugger::getBlueScreen()->addPanel(function (?Throwable $e) { // παγιδευμένη εξαίρεση
	return [
		'tab' => '...Ετικέτα...',
		'panel' => '...Κώδικας HTML του πάνελ...',
	];
});

Η συνάρτηση καλείται δύο φορές, πρώτα περνιέται η ίδια η εξαίρεση στην παράμετρο $e και το επιστρεφόμενο πάνελ απεικονίζεται στην αρχή της σελίδας. Αν δεν επιστρέψει τίποτα, το πάνελ δεν απεικονίζεται. Στη συνέχεια, καλείται με την παράμετρο null και το επιστρεφόμενο πάνελ απεικονίζεται κάτω από το callstack. Αν η συνάρτηση επιστρέφει στο πεδίο το κλειδί 'bottom' => true, το πάνελ απεικονίζεται στο κάτω μέρος.