[CakePHP] Errorページを設定する方法


Study / PHP    作成日付 : 2020/02/20 03:00:00   修正日付 : 2020/02/20 03:00:00

こんにちは。明月です。


この投稿はPHPのCakeフレームワークでErrorページを設定する方法に関する説明です。

CakePHPでデバッグモードでエラーが発生すると下記とおりのエラーページが表示されます。


上の画面はPHPで開発する時にエラー追跡するためのStack flowです。すごく有用な情報です。でも、我々が開発が終わった後、本番サーバーに転換する場合にエラーが発生する時、Stack flow情報が表示されると困ります。

一応、ソースの内容がユーザに見えることになるし、ユーザの立場でエラーページが表示されることはサイトの信頼度を落ちることになるでしょう。


そのため、本番サーバーではエラーが発生すれば、エラーページに遷移しなければならないです。

そうしたらconfigフォルダのapp.phpファイルを確認しましょう。


デバッグ設定するオプションがあります。初期設定は「true」になっていますが、「false」に設定しましょう。


また、エラーページを見ると上のページが表示されます。(エラーページを表示するためにはソース上でthrowをするか、要請エラーが発生するページを要請すればよいです。)


そうするとエラーページを作成しましょう。

先にViewフォルダのAppView.phpのソースから修正します。


この部分を以前Smarty設定する時に説明したことがあります。

link - [CakePHP] MVCフレームワークのCakeをインストールする方法

...	
protected function _evaluate($viewFile, $dataForView) {
  // エラーページの場合
  if(@$dataForView["error"] !== null) {
    // モードがdebugモードの場合、エラーが発生するとCakePHPのStack追跡ページが表示するようにした。
    if(Configure::read('debug')) {
      $this->layout = 'dev_error';
      // smartyを設定しない。
      return parent::_evaluate($viewFile, $dataForView);
    } else {
      // モードがdebugモードじゃない場合、レイアウトを「error」を表示する。
      $this->layout = "error";
    }
  }
  // smartyの値を設定
  foreach ($dataForView as $key => $val) {
    $this->_smarty->assign($key, $val);
  }
  $this->_smarty->assignByRef('this', $this);
  // ページtokenキーを設定(CakePHPに基本にあるセキュリティトークン)
  $_csrfToken = $this->getRequest()->getCookie("csrfToken");
  if($_csrfToken === null) {
    $_csrfToken = $this->getResponse()->getCookie("csrfToken")["value"];
  }
  $this->_smarty->assign("_csrfToken", $_csrfToken);
  // smartyを設定
  return $this->_smarty->fetch($viewFile);
}
...

上のソースをみれば、debugモードじゃない場合、エラーが発生すると「error」ページが表示するように設定しました。

「error」ページは各エラータイプ別で設定することも可能ですが、普通は一つのエラーページに統一します。それで我々は「error」ページだけ修正して派生ページは無視しましょう。


既存のデフォルトで様々の文法が書いていますね。綺麗にクリアしてエラーページを作成しましょう。

<!DOCTYPE html>
<html>
<head>
  <title>Error Page</title>
</head>
<body>
  This is error!!!<br />
  {$ErrorMessage}
</body>
</html>


AppView.phpのコードで応答コードの値を「ErrorMessage」キーとしてテンプレートページに渡しましょう。


また、エラーを発生させてエラーページが正しく表示することを確認します。


ここまでPHPのCakeフレームワークでErrorページを設定する方法に関する説明でした。


ご不明なところや間違いところがあればコメントしてください。

最新投稿