Erkennen und Überprüfen von Variablen in Twig-Templates
Beim Arbeiten mit einer Twig-Template-Datei sind die meisten Variablen in den Kommentaren der Template-Datei dokumentiert. Wenn dies jedoch nicht der Fall ist oder wenn Themes oder Module neue Variablen einführen, benötigen wir eine Möglichkeit, alle im Template verfügbaren Variablen zu erkennen. Twig stellt hierfür die Funktion dump() zur Verfügung, um Variablen in Template-Dateien zu erkennen und zu überprüfen.
Die Funktion dump() zeigt keine Ausgabe, wenn das Debugging nicht aktiviert ist. Erfahren Sie, wie Sie Twig-Debugging aktivieren.
Nach Aktivierung kann die Funktion dump() verwendet werden, um Informationen über eine oder mehrere Variablen im Template auszugeben.
Eine einzelne Variable überprüfen
Wenn Ihr Template eine Variable „title“ hat, gibt der folgende Code deren Inhalt im Template aus:
{{ dump(title) }}
Alle im Template verfügbaren Variablen erkennen
Um alle verfügbaren Variablen und deren Inhalt im Template auszugeben, fügen Sie (nachdem Debugging aktiviert wurde) Folgendes hinzu:
{{ dump() }}
Um nur die verfügbaren Variablennamen auszugeben, verwenden Sie:
{{ dump(_context|keys) }}
In allen Twig-Templates sind zusätzliche globale Variablen verfügbar:
- _self verweist auf das aktuelle Template und enthält erweiterte Template-Informationen, z. B. den Klassennamen des kompilierten Templates und die Twig-Umgebung. _self ist veraltet und in Twig Version 2.x entfernt.
- _context verweist auf den aktuellen Kontext und enthält alle Variablen, die an das Template übergeben wurden, wie Variablen, die aus theme() gesendet, vom Preprocessor vorbereitet oder im Template gesetzt wurden. Das Hinzufügen von {{ dump() }} ohne Angabe einer Variablen entspricht {{ dump(_context) }}.
- _charset verweist auf den aktuellen Zeichensatz.
Vorsicht bei dump()
Wenn Sie alle Variablen sehen möchten, dump() aber wegen Rekursion oder Ähnlichem zu einem Speicherüberlauf führt, können Sie stattdessen _context ansehen, um alle Schlüssel darin zu sehen:
<ol> {% for key, value in _context %} <li>{{ key }}</li> {% endfor %} </ol>
Verwenden Sie dann eine Bedingung (z. B. {% if loop.index == 2 %}), um Werte nur bei Bedarf auszugeben.
Weitere Informationen
Siehe Twig-Dokumentation zur dump()-Funktion für mehr Details.
Debugging mit Xdebug
Der am häufigsten empfohlene Debugging-Weg ist die Verwendung einer IDE mit Xdebug-Plugin.
Die einfachste Konfiguration zum Einrichten ist PHPStorm (kommerziell) mit Xdebug. Microsoft VSCode ist eine kostenlose Open-Source-IDE mit Plugins, die das gleiche ermöglichen, ohne dass kommerzielle Software gekauft werden muss.
Mit Xdebug können Sie den Ablauf verfolgen, den Inhalt von Variablen ansehen und das Ganze so tun, dass Sie Schleifen oder endlose Zyklen vermeiden, die beim Gebrauch von dump() oder kint() auftreten können.
Ein nützliches Modul namens twig_xdebug kann dabei helfen, verfügbare Variablen in Xdebug anzuzeigen.
Debugging mit Kint
Die dump()-Funktion in Twig gibt oft sehr viel Text auf der Webseite aus, was es schwer macht, das Wesentliche zu finden.
Eine Alternative zu dump() ist kint, ein PHP-Debugging-Tool. Die Funktion kint() funktioniert wie dump(), bietet aber eine erweiterbare und besser lesbare Oberfläche zur Darstellung der ausgegebenen Variablen.
Das Devel-Projekt stellt das Modul „devel kint“ bereit, mit dem Entwickler kint() anstelle von dump() verwenden können.
1. Laden Sie das Devel-Modul herunter.
2. Installieren Sie das Modul „devel kint“.
3. Wie bei dump() wird kint() keine Ausgabe erzeugen, wenn Debugging nicht aktiviert ist. Erfahren Sie, wie Twig-Debugging aktiviert wird.
4. Verwenden Sie in Ihren .twig-Dateien kint() zur Variablenprüfung, wie zuvor bei dump() beschrieben.
5. Installieren Sie bei Bedarf Search Kint, um in verschachtelten Variablen zu suchen.
Whitelist-Policy für Methoden und Klassen
Beim Arbeiten mit Objekten wird eine Whitelist für eine bestimmte Menge von Getter- und Setter-Methoden bzw. Objekten über die Klasse TwigSandboxPolicy verwendet. Dies verhindert, dass beliebige Methoden in Templates aufgerufen werden können. Beispielsweise könnte {{ node.delete }} auf einem Node-Objekt die Node löschen, wenn keine Whitelist vorhanden ist. Sie können diese Whitelist erweitern, indem Sie folgende Zeilen in Ihre settings.php einfügen:
$settings['twig_sandbox_whitelisted_methods'] = [ 'id', 'label', 'bundle', 'get', '__toString', 'toString', 'referencedEntities', ];
Dabei ist 'referencedEntities' eine Methode, die Sie in Ihrem Template verwenden möchten.