[CakePHP]400系エラーが発生した場合にトップページにリダイレクトさせる

ググると色々と方法が出てくるので今更ですが、
記事によって微妙に違ったので、最終的に上手くいったものをメモ。

cakephpがエラーをハンドリングしているControllerは以下。
/lib/Cake/Error/ExceptionRenderer.php

この中の、219行目あたりにある、error400の処理が400系エラー時の処理にあたる。
なので、これをオーバーライドしてやる形でリダイレクト処理を書く。
(直接編集してもいいが、コアシステムになるのでなるべく触らないほうがよさげ)

まずエラーの際の処理をオーバーライドするためのクラスファイルを作成。
/lib/Cake/Error/AppExceptionRenderer.php

1
2
3
4
5
6
7
8
<?php
App::uses('ExceptionRenderer', 'Error');

class AppExceptionRenderer extends ExceptionRenderer {
    public function error400($error) { // 400番台のエラー時に呼ばれるメソッドを上書き
        $this->controller->redirect(array('controller' => 'users', 'action' => 'index'), 301);
    }
}

この時に注意点は、redirect関数を呼び出すときに、$this->controller経由で呼び出さないとエラーになってしまった。
$this->redirect()ではダメだった。

で、coreクラスでエラー時に呼び出すクラスを作成したクラスに変更。

/app/Config/core.php 79行目付近

1
2
3
'renderer' => 'ExceptionRenderer',
↓↓
'renderer' => 'AppExceptionRenderer',

後はコントローラーなどがないページへアクセスすれば、指定のページにリダイレクトが発生する。

参考

CakePHP2.Xで404 Not Foundエラーをリダイレクトする方法 | WEB制作ブログ
CakePHP2 404エラーの場合にトップページにリダイレクト | Web Studio Faust

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