いくらなんでもユーザがミッシングURLをたたいたときに
Missing Controller の画面がでるのはひどいな。。。
(Debugモードを0にすると今度はデフォルト真っ白だし!)
ということで、エラー画面の修正方法を調査
とりあえず
/cake/libs/error.php
がデフォで行うエラー処理らしい。
エラー処理も
・単にViewを変えるパターン
・エラー処理そのものを変えるパターン
の2種類あるので、まあ、両方調べてみました。
今ある View を変えるだけパターン
render()でviewに渡してる名前を全部リストアップして、
その view を /app/views/errors/ の中にファイルとして作成する。
以下14ファイル(これで全部だと 思う・・)
error404.thtml
missing_action.thtml
missing_component_class.thtml
missing_connection.thtml
missing_controller.thtml
missing_scaffolddb.thtml
missing_fomponent_file.thtml
missing_helper_class.thtml
missing_helper_file.thtml
missing_layout.thtml
missing_model.thtml
missing_table.thtml
missing_view.thtml
private_action.thtml
*Smarty 使ってる人は tpl ですね。
それぞれ適当な内容をかけばOK
たぶんですがDEBUG=0 にしておくと
if (Configure::read() > 0 || $method == ‘error’) {
call_user_func_array(array(&$this, $method), $messages);
} else {
call_user_func_array(array(&$this, ‘error404’), $messages);
}
これで全部 error404.thtml にすっとばしてくれるっぽいので、
これだけでもていねいに作った方がいいかな。
(未確認です)
そもそもエラー処理を変えるパターン
/app/error.php を作成する
でこんな感じに適当に処理をかけばOK
class AppError extends ErrorHandler {
function error($params)
{
//DEBUGモードが0かそれ以外かを判別
if(Configure::read() !== 0){
return parent::error($params); //通常通りの処理
}else{
$this->controller =& new AppController(); //appcontroller を使えるように
$this->controller->redirect( “/”, 301 ); //ルートにリダイレクト
}
}
}
一応注意としては、 ErrorHandler は Exit してないそうなので
リダイレクトとかならいいですが、 ほかの処理するなら最後に exit しないと
うまく動きません。(error.php を見るとわかりますが、全部メソッド内で exit かけてます)
ここに教えてもらいました: CakePHP cakeError()は値を返さない | Shin x blog
とりあえず自分は 404に全部飛ばそうかな。