お世話になります。
この度、初めてLaravelを使用したWebAppを構築しております。
ある機能を作成するなかで、クラスの構成に悩んでしまい、手も足もでなくなってしまったので、相談させてください。
環境
PHP 7.3.4
Laravel 5.5
前提・実現したいこと
以下のような構成で各Controllerへ処理を振り分けています。
予期せぬExceptionの発生時、App\Exceptions\HandlerでそのExceptionをCatchし、
どの機能でエラーが発生したかのログを共通的に出力したいと考えております。
※ログはLaravel標準のログではなく、DBへ登録しています。
このような場合に、どのようなデザインにすれば良いのか、悩んでおります。
↓---------- [2019/5/25 10:30追記] ----------↓
要件が不足していたようなので、追記いたします。
ControllerからthrowするExceptionを、私の中で以下のように分類おり、それぞれ異なる動作としたいと考えています。
そもそも考え方がおかしい的なご指摘でも、助かります。
- 各Controllerで発生することが予測できるException
⇒各Controllerでcatchして、Controllerごとに処理を決定する。(画面上にエラーメッセージ表示等)
- 自作ExceptionA
- 自作ExceptionB
⇒各処理ではcatchせず(またはそのままthrowする)、共通動作を動かしたい。
⇒現在はApp\Exceptions\Handlerのrenderで判定し、共通動作としています。
- それ以外の予期せぬException
⇒各処理ではcatchせず(またはそのままthrowする)、共通動作を動かしたい。
上記の、2.3.4.のパターンの場合に、どのControllerで発生したExceptionか?の情報が欲しい。
↑---------- [2019/5/25 10:30追記] ----------↑
私の考え
無理やりやるのであれば、セッションを使うなど思いつくのですが、適切でない気がしています。
私には、各ControllerでExceptionを独自Exceptionでラップし、その中にどの機能かの情報を付与するくらいの案しか思いつきませんでした…。
Laravel のような便利なFrameworkを使用した場合のベストプラクティスが知りたいです。お力添えいただいたけると幸いです。
ソース
HogeController.php
PHP
1class HogeController extends Controller 2{ 3 public function __construct(HogeService $service) 4 { 5 $this->service = $service; 6 $this->functionId = FunctionIdConst::HOGE; 7 } 8 : 9}
App\Exception\Handler.php
PHP
1class Handler extends ExceptionHandler 2{ 3 : 4 public function render($request, Exception $exception) 5 { 6 if ($exception instanceof MyExceptionA) { 7 // 処理A 8 } elseif ($exception instanceof MyExceptionB) { 9 // 処理B 10 } else { 11 // ★ここで、ログ出力したい。 12 } 13 } 14}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/25 07:50