Templates Debuggen unter Twig

Debugging aktivieren

Um Informationen und Variablen bei der Entwicklung von Twig Templates ausgeben zu können, muss in Drupal der Debug Modus aktiviert werden. Dies kann u.a. in der services.yml vorgenommen werden:

# sites/default/services.yml

parameters:
  twig.config:
    debug: true

Hier muss die Zeile debug: false (Zeile 21) in debug: true geändert werden. Nachdem man den Cache geleert hat (Konfiguration → Entwicklung → Leistung), wird Twig im Debug-Modus ausgeführt.

In der services.yml kann auch das Caching von Twig konfiguriert bzw. deaktiviert werden. Dazu einfach die beiden Keys auto_reload (auf TRUE) und cache (auf FALSE) verändern. Das Caching zu deaktivieren ist besondern während der Entwicklung von Themes hilfreich, da ansonsten Dateiänderungen immer erst nach einem manuellen Leeren des Caches angewendet werden würden.

Durch die Aktivierung des Debug-Modus von Twig werden im HTML-Quelltext auch viele zusätzliche und hilfreiche HTML-Kommentare ausgegeben. Dadurch kann man schnell erkennen, welche Template-Datei für eine bestimmte Ausgabe verwendet wurde.

  <!-- THEME DEBUG -->
  <!-- THEME HOOK: 'page' -->
  <!-- FILE NAME SUGGESTIONS:
     * page--front.html.twig
     * page--node.html.twig
     x page.html.twig
  -->
  <!-- BEGIN OUTPUT from 'core/themes/bartik/templates/page.html.twig' -->

Wie man an den sehr aussagekräftigen HTML-Kommentaren erkennen kann, sollte man das Twig Debugging niemals in einer Produktivumgebung (öffentlich erreichbare Website) aktiviert haben.

Debuggen mit Twig "dump()"

Mit der dump() Funktion von Twig (sie ist vergleichbar mit der var_dump() Funktion in PHP), kann der Inhalt von Variablen analysiert werden. Der leere Funktionsaufruf gibt alle in dieser Template-Datei verwendbaren Variablen aus.

{{ dump() }}

Ausgabe aller Template Variables in node.html.twig

Möchte man eine bestimmte Variable analysieren, kann diese als Parameter der Funktion übergeben werden:

{{ dump(view_mode)

Ausgabe der Variable view_mode im node.html.twig Template

Besseres Debugging mit Kint

Die Ausgaben von dump() können sehr umfangreich und wenig übersichtlich werden (z.B. wenn man sich alle Variablen des page.html.twig ausgeben lassen möchte). Eine übersichtlichere Ausgabe produziert „Kint“.

Kint ist nicht im Drupal 8 Core enthalten. Das Tool ist im BROKEN-LINK:Devel bzw. Devel Kint Modul LINK-BROKEN enthalten. Dieses muss erst installiert und aktiviert werden, damit kint() genutzt werden kann.

{{ kint() }}

Auch hier kann der Funktion wieder ein Parameter übergeben werden, um eine Variable genauer und gez ielter analysieren zu können.

Besonderheit: "#" und "-" in Variablen-Namen

Allerdings lassen sich so keine Variablen ausgeben, die ein Raute-Zeichen (#) oder Bindestrich (-) enthalten.

Der Code {{ dump(elements.#theme) }} produziert die Fehlermeldung:

Twig_Error_Syntax: Unexpected character "#" in ... in Twig_Lexer->lexeExpression() ...

Solche Variablen lassen sich wie folgt debuggen:

{{ dump(elements['#theme']) }}

Xdebug Breakpoint

Es ist auch möglich in Twig Templates einen Breakpoint zu definieren, um an dieser die Ausführung des Codes zu pausieren und die vorhanden Variablen und Umgebungsinformationen zu analysieren.

Wenn PHPStorm als Editor genutzt wird, kann ein Twig Template direkt analysiert werden: PHPStorm Dokumentation

Alternativ bringt das Devel Modul eine Unterstützung mit: {{ devel_breakpoint() }}
oder das Twig Xdebug Modul: {{ breakpoint() }}