Debug Templates

Benötigt man für die Ausgabe z. B. einer Liste für das Frontend ein eigenes Template oder möchte man bei einem vorhanden Template wissen, welche Attribute an das Template übermittelt werden, kann man diese sich mit der Debug-Toolbar von Symfony sehr komfortabel ausgeben lassen.

Das Standardtemplate ist „metamodel_prerendered“, bzw. das Template, welches in der Render-Einstellung für die Ausgabe ausgewählt wurde.

Ist noch kein eigens Template im Einsatz, muss eine Kopie von „metamodel_prerendered“ im Contao-Ordner „/templates“ angelegt werden.

Das jeweilige Template wird mit den folgenden Zeilen oben ergänzt:

1<?php
2// Debug items.
3if (\Contao\System::getContainer()->get('kernel')->isDebug()) {
4    dump($this->data);
5}
6?>

Anschließend muss man die Seite im Frontend im Debugmodus ansehen. Dazu im Backend den Debugmodus im Header einschalten, oder für einen dauerhaften Debugmodus im Projektordner eine Datei .env bzw. .env.local mit dem Inhalt APP_ENV=dev anlegen (Seite sollte dann nicht öffentlich zugänglich sein).

Anschließend kann man das Array in der Debug-Toolbar über das „Fadenkreuz-Icon“ untersuchen:

img_symfony-toolbar

Mit der Prüfung „isDebug()“ stört das dump nicht den normalen Aufruf der Seite.

Mit MM 2.2 gibt es ein eigenes Template metamodel_prerendered_debug.html5, welches man in den Rendersettings der FE-Ausgabe auswählen kann - Werte der MM-Liste werden mit dem Template erstmal keine ausgegeben.

Für die leichte Übernahme der Array-Angaben in ein FE-Template, gibt es den Array-Helper, die eine Ausgabe im Quelltext für ein Copy&Paste erstellt.

Debug in MM 2.0

In Contao 3 steht die Symfony-Toolbar nicht zur Verfügung und man muss über ein print_r gehen.

Das jeweilige Template wird mit einigen Ausgabezeilen ergänzt und sollte anschließend wie folgt beginnen:

1<?php
2echo "<!-- DEBUG START \n";
3echo "<pre>\n";
4print_r($this->items->parseAll($this->getFormat(), $this->view));
5echo "</pre>\n";
6echo "\n DEBUG ENDE -->";
7?>

Wird die entsprechende Webseite mit derm Listing im Browser aufgerufen, sollte sich im Quelltext die Debugausgabe befinden.

Ist die Ausgabe sehr umfangreich, kann die Darstellung im Browser sehr langsam werden - Abhilfe schafft z.B. sich nur ein Item-Knoten ausgeben zu lassen:

1<?php
2echo "<!-- DEBUG START \n";
3echo "<pre>\n";
4// nur 0.-Knoten
5print_r($this->items->parseAll($this->getFormat(), $this->view)[0]);
6echo "</pre>\n";
7echo "\n DEBUG ENDE -->";
8?>

Ist in den Render-Einstellungen die Weiterleitung und Filter für die Detailseite eingestellt, wird die Ausgabe des Arrays im Quelltext sehr umfangreich und führt häufig zu einem Error „Allowed memory size…“. Abhilfe schafft hier z.B. das kurzzeitige Abschalten des Filters für die Weiterleitung.

Die Ausgabe kann man wieder entfernen, in dem man den Ausgabeblock auskommentiert, löscht oder zu einem anderen Template wechselt.