スマートフォンやhtml5+CSS3など新技術に四苦八苦。jQuery、AjaxなどJavaScriptも難しいですね。そんなWebに悩む人のネタ帳です。

CakePHPで「404 NOT FOUND」や「500 Internal Server Error」など、例外処理で画面を作る方法です。

CakePHPでは、特に何もしなくてもフレームワークの方でメッセージを出してくれます。しかし、開発側で意図的にエラーの種類を分けたり、画面を作成したい場合があります。
フレームワークを無視して独自でPHPで実装するのもありですが、CakePHPにそのしくみが用意されているのを見つけたので、利用してみます。

エラー用のビューを設置する

CakePHPではエラーが発生した際に参照するビューディレクトリがあります。

/app/views/erros/

例えば、404エラーの場合は「error404.ctp」というビューを設置しておけば、404エラーが発生した際に自動的にこのビューが出力されます。

テンプレートを用いる

デフォルトのテンプレートの内容は以下のライブラリにまとめられています。(デフォルトでこのフォルダのテンプレートが参照されてるわけではないようです。あくまでテンプレートの原型がアーカイブされているだけです。)

/cake/libs/view/errors/

こちらから、先ほどの「/app/views/erros/」にビューファイルをコピペして、内容を編集すればオリジナルのエラーページを構築できます。

エラーの種類について

先ほどのライブラリの一覧を見ても分かるとおり、エラービューには以下の種類があります。
基本的には404と500しか使わないと思いますが。

error404.ctp ページが見つからない
error500.ctp サーバエラー
missing_action.ctp アクションが見つからない
missing_behavior_class.ctp ビヘイビアクラスが見つからない
missing_behavior_file.ctp ビヘイビアファイルが見つからない
missing_component_class.ctp コンポーネントクラスが見つからない
missing_component_file.ctp コンポーネントファイルが見つからない
missing_connection.ctp DB情報が見つからない
missing_controller.ctp コントローラが見つからない
missing_helper_class.ctp ヘルパークラスが見つからない
missing_helper_file.ctp ヘルパーファイルが見つからない
missing_layout.ctp レイアウトが見つからない
missing_model.ctp モデルが見つからない
missing_scaffolddb.ctp scaffolddbが見つからない
missing_table.ctp DBのテーブルが見つからない
missing_view.ctp ビューが見つからない
private_action.ctp プライベートアクションを直接コールした
scaffold_error.ctp scaffoldエラー

意図的にエラービューを出力する

例えばコントローラから任意の条件で404エラーを発生させたい場合、以下のように書くことでエラー画面に遷移させることができます。

if($a == $b){	// 任意のエラー判定
	$this->cakeError('error404');
}

変数aと変数bが等しくない場合に、ビュー「error404.ctp」が出力されます。

PHPでシステムを組む場合に、よりシンプルで漏れのない例外処理を構築するのに、毎回頭を悩ましますが。
このしくみだとうまく活用できそうですね。

このエントリーをはてなブックマークに追加

Comment

Comment Form

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Monthly Archives

Search