たけしです。
CakePHP で開発をしている時は、core.php のデバッグレベルを2とか3とかにして開発をしているのですが、これがhtmlの最後の方にブリッと大量に吐かれて案外邪魔です。
そこで FirePHP (FireBugのPHP版のようなもの)を導入して、consoleタブ色々なデバッグ情報を出力してみます。ちなみにPHP5限定です。
[ 用意するもの ] ・Firefox の2か3 ・FireBug ・FIrePHP ・FirePHPコアライブラリ
[ インストール手順 ] 1. FirePHP.class.php を /app/vendors に配置します 2. /cake/libs/model/datasources/dbosource.php を 任意のAPPディレクトリ/model/datasources/dbosource.php にコピーします 3. dbo_source.php 内の showLog() を下記の関数に置き換えます
function showLog($sorted = false) {
if ($sorted) {
$log = sortByKey($this->_queriesLog, 'took', 'desc', SORT_NUMERIC);
} else {
$log = $this->_queriesLog;
}
if ($this->_queriesCnt > 1) {
$text = 'queries';
} else {
$text = 'query';
}
if (php_sapi_name() != 'cli') {
$summery = "{$this->_queriesCnt} {$text} took {$this->_queriesTime} ms";
$header = array("Nr", "Query", "Error", "Affected", "Num. rows", "Took (ms)");
$body = array($header);
foreach ($log as $k => $i) {
$row = array(($k + 1), $i['query'], $i['error'], $i['affected'], $i['numRows'], $i['took']);
$body[] = $row;
}
fb(array($summery, $body), FirePHP::TABLE);
} else {
foreach ($log as $k => $i) {
print (($k + 1) . ". {$i['query']} {$i['error']}\n");
}
}
}
- 任意のAPPディレクトリ/config/bootstrap.php に下記のソースを追記します
ob_start();
App:: import ( 'Vendor', 'FirePHP', array ( 'file' => 'FirePHPCore'.DS.'FirePHP.class.php'));
function fb()
{
$instance = FirePHP::getInstance(true);
$args = func_get_args();
return call_user_func_array(array($instance,'fb'),$args);
return true;
}
- 好きなところで fb($this->data); 等とすると FirePHP の console に表示されるはずです。
一応上記の方法はハックになりますので、自己責任でお願いします。
コメントする