CakePHP 404エラーページを作成

CakePHPには、『Debug Level』が存在していて運用時には『0』に変更しますよね。
当然のことですが、『Debug Level』を『0』に変更するとエラー出力も変わります。

▼『Debug Level』が『1』以上

DebugLecelが1以上のエラー出力

▼『Debug Level』が『0』

DebugLLevelが0のエラー出力

「create app\views\errors\missing_controller.ctp」と書いてありますが、『Debug Level』を『0』(運営時)だと『missing_controller.ctp』は使用してくれません。
代わりに『error404.ctp』を作成する必要があります。

▼『error404.ctp』を作成後

error44.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エラーページ用レイアウトを使用

あとは、かっこいい404エラーページを考えるだけですね!