2010年3月29日月曜日

CakePHPでデバッグ情報を消す裏技

HTMLを直接出す困ったちゃん

CakePHPのConfigure::read() > 1 (引数省略はdebugが渡されることになる)だと、DboSource::showLog()が強制的に実行されて、レンダーされたものの最後に必ずSQLの情報が付加される。それはそれで有り難いし、普段の開発ではその方が助かるんだけども、CSVファイルとかHTML以外のファイルを出力する時は邪魔でしかない。

一時的にdebugを0にすればOK

debugが1でも実行時間がHTMLのコメントアウトで付加されるので、HTML以外のファイルで、そういった文字列が勝手に出力されるのが不都合な場合は、レンダー直前でConfigure::write('debug', 0);とすればOK!裏技でもなんでもないけど。一つ注意なのは、デバッグ系で使うもの(pr関数とか)が使えなくなるということ。

ソースを読んでみたら、このデバッグ情報のところはdebugの数値によって強制的に出る。他に消す方法がないか(使用するレイアウトを変えるとか、レイアウトを使用しない(falseを渡す)とか)探ったけど、どうもだめっぽい。デバッグ情報は、必要ならその時表示して、あとは開発モードならログファイルに書き込んどくっていうくらいでいいと思うんだけど、CakePHPはその辺は男は黙ってログ出力!らしい。

controllerのlogメソッド経由でCakeLog::writeをするのは、開発時のデバッグ情報よりも、稼働中に起きた是正すべきエラーのログを残すために使った方が良いと思うので、目的が違う。 showLogメソッドを改造しようかと思ったけど、今回はConfigure::write('debug', 0)をタイミング良く呼び出すことで対処した。でもこれって、RSSとかXML、バイナリデータをもっと扱うようになると面倒というか、この仕様じゃ普段の開発と違うしで、なんか変だなー。ハードコーディングはBKよ!

0 件のコメント: