こんにちは。明月です。
この投稿は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ページを設定する方法に関する説明でした。
ご不明なところや間違いところがあればコメントしてください。
- [CakePHP] Errorページを設定する方法2020/02/20 03:00:00
- [CakePHP] Transactionを使う方法とEntityクラスを利用してInsert、Update、Deleteする方法2020/02/19 03:00:00
- [CakePHP] ORMのテーブルFetch設定2020/02/18 03:00:00
- [CakePHP] Cakeフレームワークでデータベースに接続する時に使うQuery式とEntityクラス、Tableクラス、ResultSet2020/02/17 08:16:23
- [CakePHP] データベース(MariaDB(Mysql))を接続する方法2020/02/14 03:00:00
- [PHP] namespaceとuse2020/02/13 03:00:00
- [CakePHP] RequestとResponseに関して2020/02/12 03:00:02
- [CakePHP] PHPのCakeからAjax要請がある時、jsonタイプ(json_encode関数)でResponseする方法とControllerでViewを選択する方法2020/02/08 03:00:00
- check2024/04/10 19:03:53
- [Java] 64.Spring bootとReactを連結する方法(Buildする方法)2022/03/25 21:02:18
- [Javascript] Node.jsをインストールしてReactを使う方法2022/03/23 18:01:34
- [Java] 63. Spring bootでcronスケジューラとComponentアノテーション2022/03/16 18:57:30
- [Java] 62. Spring bootでWeb-Filterを設定する方法(Spring Security)2022/03/15 22:16:37
- [Java] JWT(Json Web Token)を発行、確認する方法2022/03/14 19:12:58
- [Java] 61. Spring bootでRedisデータベースを利用してセッションクラスタリング設定する方法2022/03/01 18:20:52
- [Java] 60. Spring bootでApacheの連結とロードバランシングを設定する方法2022/02/28 18:45:48
- [Java] 59. Spring bootのJPAでEntityManagerを使い方2022/02/25 18:27:48
- [Java] 58. EclipseでSpring bootのJPAを設定する方法2022/02/23 18:11:10
- [Java] 57. EclipseでSpring bootを設定する方法2022/02/22 19:04:49
- [Python] Redisデータベースに接続して使い方2022/02/21 18:23:49
- [Java] Redisデータベースを接続して使い方(Jedisライブラリ)2022/02/16 18:13:17
- [C#] Redisのデータベースを接続して使い方2022/02/15 18:46:09
- [CentOS] Redisデータベースをインストールする方法とコマンドを使い方2022/02/14 18:33:07