CakePHP のデバッグ出力を FirePHP で表示する。

2009.04.16 | tkc | | | Comments (0) | Trackbacks (0)

たけしです。

CakePHP で開発をしている時は、core.php のデバッグレベルを2とか3とかにして開発をしているのですが、これがhtmlの最後の方にブリッと大量に吐かれて案外邪魔です。
そこで FirePHP (FireBugのPHP版のようなもの)を導入して、consoleタブ色々なデバッグ情報を出力してみます。ちなみにPHP5限定です。

[ 用意するもの ] ・Firefox の2か3 ・FireBugFIrePHPFirePHPコアライブラリ

[ インストール手順 ] 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");
            }
        }
    }
  1. 任意の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;
}
  1. 好きなところで fb($this->data); 等とすると FirePHP の console に表示されるはずです。

一応上記の方法はハックになりますので、自己責任でお願いします。

トラックバック(0)

このブログ記事を参照しているブログ一覧: CakePHP のデバッグ出力を FirePHP で表示する。

このブログ記事に対するトラックバックURL: http://www.ficc.jp/cgi-bin/mt4/mt-tb.cgi/132

コメントする