Debugging von Anwendungen, die auf PHP basieren, ist zwar mit Tools wie Zend / Eclipse leichter geworden als noch vor einigen Jahren, aber manchmal bedarf es auch nur einer einfachen Anzeige von Header-, Session- oder anderen Requestdaten während der Laufzeit im Frontend.
Bei der Entwicklung von CakePHP Anwendungen können von Haus aus Informationen z.B. zur Datenbankabfrage mithilfe der Konfigurationsvariable debug und des Befehls
[php]
Configure::write("debug", 1);
[/php]
ausgegeben werden.
Es gibt insgesamt 4 Debug Level, die hier im Kontext einer älteren CakePHP Version (dort wird die Konstante DEBUG genutzt) folgendermaßen bezeichnet werden:
There are 4 levels of debug: 0-production, 1- development, 2- full debug with sql and 3- full debug with sql and dump of the current object. Specifying this setting to a non-zero value will force Cake to print out the results of pr( ) and debug( ) function calls, and stop flash messages from forwarding automatically. In production, the „flash messages“ redirect after a time interval. With the other debug levels you get to click the „flash message“ to continue. For example, if you want to set the debug level to „full debug with sql“, the line should look like this: define(‚DEBUG‘, 2);
Da die Debug Informationen von Cake immer am unteren Seitenende gerendert und – sobald man vom CakePHP Standardlayout abweicht – auch äußerst hässlich werden, gibt es bei Snook.ca die folgenden CSS Klassendefinitionen, um diese Infos generell schicker zu gestalten:
[css]
.cake-sql-log {
position:fixed;
top:99%;
z-index:10;
width:100%;
background-color:#000;
color:#FFF;
border-collapse:collapse;
}
.cake-sql-log caption {
background-color:#900;
color:#FFF;
}
.cake-sql-log:hover {
top:auto;
bottom:0;
}
.cake-sql-log td {
padding:3px;
border:1px solid #999;
background-color:#EEE;
color:#000;
}
[/css]
Wer jetzt noch weitere Informationen braucht (wie oben bereits erwähnt u.a. zu Sessiondaten, Log-Aktivitäten, Timings etc.) der ist mit der CakePHP DebugKit Toolbar von Mark Story gut bedient.
Die Toolbar „versteckt“ sich geradezu absolut positioniert in der rechten oberen Ecke der Webseite und öffnet sich blei Klick auf ein kleines Icon.
Was sie alles bietet, zeigt sich in den folgenden Screenshots:
Ich binde die Toolbar dynamisch je nach Umgebung auf folgende Art und Weise im app_controller ein:
[php]
public function __construct(){
parent::__construct();
if(DEVELOPMENT_ENVIRONMENT){
$this->components[] = ‚DebugKit.Toolbar‘;
Configure::write(‚debug‘, 2);
} else {
Configure::write(‚debug‘, 0);
}
}
[/php]
Hier prüfe ich auf die Konstante DEVELOPMENT_ENVIRONMENT, die ich, wie alle anderen Variablen, die global für die App zur Verfügung stehen müssen, in der bootstrap.php definiere. Solche Variablen könnten eben serverseitig zur Auswahl der entsprechenden Pfade (z.B. für Logs oder temporäre Uploads) oder auch für die Auswahl der entsprechenden Datenbankverbindungen herangezogen werden.