AppErrorが自前のエラーメソッドが呼び出されない? ...なんてことはないです
CakeErrorを調べていると、自前で定義したエラーメソッドが呼び出されない、という記事をちらほら見かけます。
cakeError(): 'error'以外のメソッド名は無視される。 - 呆備録
CakePHPのデバッグレベル0の時に$this->cakeError('error500')が404のエラーになる - ほげほげ(仮)
cakeError用メソッド作ってもDEBUG=0だと動かない件 | 自転車で通勤しましょ♪ブログ
どうも昔はどうだったのかわかりませんが、現時点での最新版1.3.11ではもちろんそんなことはありません。
疑惑の部分、cake/libs/error.php __construct()
<?php if ($method !== 'error') { if (Configure::read('debug') == 0) { $parentClass = get_parent_class($this); if (strtolower($parentClass) != 'errorhandler') { $method = 'error404'; } $parentMethods = array_map('strtolower', get_class_methods($parentClass)); if (in_array(strtolower($method), $parentMethods)) { $method = 'error404'; } if (isset($messages[0]['code']) && $messages[0]['code'] == 500) { $method = 'error500'; } } }
読み解けば、debugレベルが0の場合で、さらに親クラスがErrorHandlerでない場合、もしくはErrorHandlerクラスに定義されているメソッドだった場合には、強制的にerror404メソッドにしてます。さらにcodeが500になっていればerror500メソッドに変更しているという、よくわからない実装です。もうちょっと書きようがあるかとは思いますが。
なんにせよ、誤解は誤解、ちゃんと解いておきましょう。そして、CakePHP 2.0への期待を高めましょうw