time 2017/10/17
CakePHPには、『Debug Level』が存在していて運用時には『0』に変更しますよね。
当然のことですが、『Debug Level』を『0』に変更するとエラー出力も変わります。
▼『Debug Level』が『1』以上
▼『Debug Level』が『0』
「create app\views\errors\missing_controller.ctp」と書いてありますが、『Debug Level』を『0』(運営時)だと『missing_controller.ctp』は使用してくれません。
代わりに『error404.ctp』を作成する必要があります。
▼『error404.ctp』を作成後
これで404エラーページ作成できましたが、レイアウトは他のページと同じもの(/ layouts / default.ctp)が使用されています。
しかし、かっこいい404エラーページの条件は、「通常のレイアウトと違う」!!
(※あくまで、個人的な意見です。僕はセンスがないので、通常のレイアウトと違う404エラーページは作っていません・・・)
というわけで、404エラーページだけのレイアウトを作成します。
CakePHP1.3マニュアルを見てみると、
4.3 エラーハンドリング(Error Handling)
app/app_error.php に次のように定義をおこなったファイルを作成してください。
<?php class AppError extends ErrorHandler { } ?>
とあります。
マニュアルに書かれている『cakeErrorメソッド』をDevasで検索すると、
if (file_exists(APP . 'error.php')) { include_once (APP . 'error.php'); } elseif (file_exists(APP . 'app_error.php')) { include_once (APP . 'app_error.php'); }
と書かれていました。
『/ app』に『error.php』か『app_error.php』があればincludeしてくれるみたいです。
ということは、『ErrorHandlerクラス』を継承してオーバーライドしちゃえばいいって事ですね。
今回は、404エラーページ専用のレイアウトを使用したいだけなので、以下のようにします。
▼app_error.php
class AppError extends ErrorHandler { function error404($params) { $this->controller->layout = 'error_layout'; parent::error404($params); } }
『/ app / views / layouts』に、上記で指定した名前の404エラーページ専用のレイアウトを作成したら完了です。
▼『error_layout.ctp』を使用した404エラーページ
あとは、かっこいい404エラーページを考えるだけですね!