Web事業部実績紹介_Webマーケティング
Web事業部実績紹介_Webマーケティング
2012.11.07

CakePHP2系でエラーページ用の処理をやってみる

づや

こんにちは、づやです。

実家のありとあらゆるところから野生のハチが出撃しています。まさにハチ要塞。

さて、前回の記事(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]);
	}
}

こんな感じで任意のページを表示することができました。