Opis
Atykuł przedstawia system debungowania czyli wyświetlania zmiennych w środowisku testowym (developerskim) w celu szybszego wykrycia błędu w aplikacji. System posiada również zintegrowany system zapisu do logów.
Struktura Katalogów
Musimy dodać jeden katalog o nazwie 'logs' w folderze /application/ również w logs tworzymy plik o nazwie file.log.
Następnie dodajemy katalog 'Debugs' do folderu /library/.
Implementacja
Cały kod jest zawarty w klasie Debugs_Debug, którą należy dodać do katalogu 'Debugs', w takim przypadku nazwa pliku to: library/Debugs/Debug.php. Kod dla tej klasy jest dstepny w listingu 1.0.
Wykorzystanie
Ponieważ nasza klasa jest statyczna należy wywołać w jakimkolwiek miejscu w kodzie następujące polecenie:
Debugs_Debug::dump($vars, false, 'short', false);
Lista zmiennych:
/**
*
* @param mixed $var
* @param boolean $exit Czy po wyświetleniu przerwać działanie?
* @param string $description Określa sposób wyświetlania opisu. Możliwe wartości short, medium, long.
* @param boolean $log Czy zapisywać w logach?
* @return void
*/
Wyświetlenie Debungacji
Aby wyświetlić wszystkie zmienne przekazane do klasy Debug należy posłużyć się jednym poleceniem, który domyślnie powinniśmy dodać w BOOTSTRAP'erze (index.php aplikacji), zaraz pod: $frontController->dispatch();
//debug msgs
echo Debugs_Debug::displayMessages();
Listing
<?php
/**
* Klasa debugująca
*
*/
class Debugs_Debug {
public static $debugMessages = '';
/**
* Wyświetla przekazaną wartość
*
* @param mixed $var
* @param boolean $exit Czy po wyświetleniu przerwać działanie?
* @param string $description Określa sposób wyświetlania opisu. Możliwe wartości short, medium, long.
* @param boolean $log Czy zapisywać w logach?
* @return void
*/
public static function dump($var, $exit = false, $description = 'short', $log = true) {
if(Zend_Registry::getInstance()->get('env') == 'local' || Zend_Registry::getInstance()->get('env') == 'home.pl') {
$debugBacktrace = debug_backtrace();
$message = '<hr />';
switch ($description) {
case 'short':
$message .= '<strong>'.$debugBacktrace[0]['file'].'</strong> w linii <strong>'.$debugBacktrace[0]['line'].'</strong>';
break;
case 'medium':
$message .= '<ol>';
foreach ($debugBacktrace as $i => $d) {
$message .= '<li>';
$message .= '<strong>'.$d['class'].$d['type'].$d['function'].'</strong>';
$message .= ' - w pliku <em>'.$d['file'].'</em> w linii <em>'.$d['line'].'</em>';
$message .= ' z '.count($d['args']).' argumentami.';
$message .= '</li>';
}
$message .= '</ol>';
break;
case 'long':
$message .= '<ol>';
foreach ($debugBacktrace as $i => $d) {
$message .= '<li>';
$message .= 'W pliku <em>'.$d['file'].'</em> w linii <em>'.$d['line'].'</em>';
$message .= ' wywołano <strong>'.$d['class'].$d['type'].$d['function'].'</strong>';
if(count($d['args']) != 0) $message .= '<ol>';
$message .= '(';
foreach ($d['args'] as $a) {
$message .= '<li>';
//Zend_Debug::dump($a);
$message .= '</li>';
}
$message .= ').';
if(count($d['args']) != 0) $message .= '</ol>';
}
$message .= '</li></ol>';
break;
}
$message .= '<hr />';
$message .= Zend_Debug::dump($var, 'DUMP', false);
self::$debugMessages .= $message;
//echo $message;
if($log) {
$writer = new Zend_Log_Writer_Stream('../application/logs/file.log');
$logger = new Zend_Log($writer);
$logger->log(strip_tags(str_replace('"', '"', $message)), 1);
}
if($exit) {
exit();
}
}
}
public static function displayMessages() {
if(self::$debugMessages != ''){
$msgContainer = '<div style="text-align: left; background-color: #dfdfdf; font-family: Courier,monospace; font-size: 11px; font-style: normal; font-weight: normal; font-variant: normal; padding: 5px;">';
$msgContainer .= self::$debugMessages;
$msgContainer .= '</div>';
return $msgContainer;
}
}
}
Ranga: Administrator serwisu Punktów: 0