CakePHP 2.6.2 でエラーコード別にビューを分ける
デフォルトだと 4XX エラーは app/View/Errors/error400.ctp
、
5XX エラーは app/View/Errors/error500.ctp
が表示されます。
また、Configure::write('debug', 2)
のようにデバッグモードを有効にしている場合、
例外クラスに種類に応じてより詳細なビューが使われます。
今回、以下の仕組みを実装します。
基本的には http://www.logicsart.com/cakephp/exception-handling-in-cakephp/ の通りにしますが、上記 2 番ができなかったので、少しコードを変更する必要があります。
まずはリンク先のとおりにコードを書いてください。
AppExceptionRenderer
クラスの notFound
メソッドなどの内容
リンク先のコードはデフォルトの挙動とは少し違うので、デフォルトのコードに合うよう 書き換えます。
$this->controller->beforeFilter(); $message = $error->getMessage(); if (!Configure::read('debug')) { $message = __d('cake', 'Not Found'); } $url = $this->controller->request->here(); $this->controller->response->statusCode($error->getCode()); $this->controller->set([ 'name' => h($message), 'message' => h($message), 'url' => h($url), 'error' => $error, ]); $this->controller->render('/Errors/error404'); $this->controller->afterFilter(); $this->controller->response->send();
AppExceptionRenderer
クラスの missingController
メソッドなどの内容
リンク先のコードのだとデバッグモードが有効のときでも error404.ctp
などが
使われ、詳細なエラーページが表示されないので以下のように書き換えます。
public function missingController($error) { if (!Configure::read('debug')) { $this->notFound($error); } else { $renderer = new parent($error); $renderer->render(); } }