エラーハンドリングを自作しようと考えています。
理想はLaravelのように、debugフラグが有効であればエラー内容表示せず、代わりのエラーページを表示したいです。
phpのエラーメッセージを無視してエラーページを表示するにはどのように実装すれば良いでしょうか?
仕様について
例えば、DB保存処理が失敗した時に次の事をしたいとします。
- 特定のメールアドレスに送りたとします。
- エラー内容を表示せず、エラーページを表示して処理を終える
現状
前述の1については次のような処理で実現できると思うのですが、2のエラーページ表示のスクリプトが思いつきません。
php
1 2public sendMail() { 3 4 $isSave = false; 5 try { 6 // DB保存処理は省略 7 8 // 送信フラグ 9 $isSave = true; 10 } catch($e) { 11 // メール送信 12 $isSave = false; 13 } 14 15 if(! $flag) { 16 mail('to@example.com', 'エラーメール', 'DBの保存に失敗しました。'); 17 throw new \Exception('DBの保存に失敗しました。') 18 } 19} 20
思いつく方法
エラーハンドラーを作って、描画後に止めてしまうという方法を思いつきました。
ただ、エラーハンドリングで検索しても、該当する方法が見つかりません。
もっと一般的な実装方法があるのでしょうか?
php
1 2public sendMail() { 3 // エラーハンドル定義 4 set_exception_handler(function($throwable) { 5 send_error_log($throwable); 6 7 // echoですが、実際はhtmlを出力します。 8 echo('エラーが発生しました'); 9 exit(); 10 }); 11 12 $isSave = false; 13 try { 14 // DB保存処理は省略 15 16 // 送信フラグ 17 $isSave = true; 18 } catch($e) { 19 // メール送信 20 $isSave = false; 21 } 22 23 if(! $flag) { 24 ini_set('display_errors', 'Off'); 25 mail('to@example.com', 'エラーメール', 'DBの保存に失敗しました。'); 26 throw new \Exception('DBの保存に失敗しました。') 27 } 28} 29
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/27 05:08
2021/07/27 05:26
2021/07/27 06:37
2021/07/27 06:44
2021/07/27 07:02
2021/07/27 07:35