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