UNIX的なアレ

UNIX的なこととかいろいろ

CakePHP1.2のErrorHandlerでハマった

いままでは404のエラーくらいでしか使っていなかったのですが、ErrorHandlerに独自メソッドを追加してみたんです。でも、debugレベルが0になるとなんだか動かないんですよね。
んでもって、コードを読んでみましたよ。するとまぁコンストラクタの中に以下のような記述を見つけました。

  • cake/libs/error.php
<?php
function __construct($method, $messages) {
    〜 中略 〜
    if ($method !== 'error') {
     	if (Configure::read() == 0) {
	    $method = 'error404';
	    if (isset($code) && $code == 500)
                $method = 'error500';
	    }
	}
    }
}

なるほどー、これですねぇ。というわけで、オーバーライドしてapp_error.phpで逃げることにしました。

  • app/app_error.php
<?php
function __construct($method, $messages) {
    〜 中略 〜
//        if ($method !== 'error') {
    if (!preg_match('/^error/',$method)) {
        if (Configure::read() == 0) {
            $method = 'error404';
            if (isset($code) && $code == 500) {
                $method = 'error500';
            }
        }
    }
    $this->dispatchMethod($method, $messages);
    $this->_stop();
}

とりあえずはこんな感じです。method名を判定している部分を、errorで始まるメソッド名を使えるように変更しました。1行だけの修正でなんとか回避。

あんまりキレイな方法ではないですが、まぁとりあえずはコレでいい、かな・・・?