こんにちは、づやです。
実家のありとあらゆるところから野生のハチが出撃しています。まさにハチ要塞。
さて、前回の記事(CakePHP2系で404エラー画面を作る)で例外を投げたのですが、エラーページ表示の時に色々処理したいことがあったので、対応してみました。
もっといい方法があるかもしれませんが、とりあえず忘備録として。
1.エラーの時に独自のクラスを呼ぶようにする
まず、/app/Lib/配下に独自のハンドルクラスを作成します。
とりあえずCustomExceptionRendererクラスで行くことにしまして、まずはConfig/core.phpの73行目付近を、CustomExceptionRendererを使用するように書き換えます。
Configure::write('Exception', array(
'handler' => 'ErrorHandler::handleException',
'renderer' => 'CustomExceptionRenderer', // ここを作成したクラス名
'log' => true
));
2.呼ばれるクラスを作る
次に/app/Lib/Error/CustomExceptionRenderer.phpを作成します。
中身はとりあえずデフォルトでつかっている/Cake/Error/ExceptionRenderer.phpをコピってクラス名とファイル名を適切に変更
基本的な処理は残したいので、ExceptionRendererを継承します。
App::uses('ExceptionRenderer', 'Error');
class CustomExceptionRenderer {
public function __construct(Exception $exception) {
// ここでやりたいことをごちゃごちゃやればよい
// 今回はページタイトルをステータスコード 対応したメッセージに変更してみました
$code = $exception->getCode();
$codes = $this->controller->response->httpCodes($code);
// 必要に応じて、setし直してあげる
$this->controller->set('title_for_layout' , $code ." " . $codes[$code]);
}
}
こんな感じで任意のページを表示することができました。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。