StartdashBundle での例外処理は、SdExceptionListener にてハンドリングされます。
特に設定なしで動作させたり、開発モード(app_dev.php)動作1)の場合、Symfony2標準の ExceptionListener と同じ動作になります。
※ extends し、parent をコールしています。
設定にて例外クラスに例外レベルを指定することで、3段階の例外処理を振り分けて実施します。
StartdashBundle標準のものは以下のように登録されています。
tinyworld_startdash.sdexceptions:
TinyWorld\StartdashBundle\Core\Exception\SdException: 'interrupt'
TinyWorld\StartdashBundle\Core\Exception\SdInterruptException: 'interrupt'
TinyWorld\StartdashBundle\Core\Exception\SdRestartException: 'restart'
TinyWorld\StartdashBundle\Core\Exception\SdRetryException: 'retry'
Symfony\Component\HttpKernel\Exception\NotFoundHttpException: 'interrupt'
例外クラス(後述)毎に、例外レベルを指定しています。
例外レベル毎に、以下の動作を行います。
中断例外(interrupt)時には、デフォルトテンプレート2)内容をフレーム無効化して表示します。
再開可能例外(restart)や継続可能例外(retry)のGETリクエスト時には、同テンプレート3)内容をフレーム有効化して表示します。
使用するテンプレートは、ステータスコード専用、ステータスグループ用のテンプレートファイルがあれば、それを自動利用する。
ファイル名部末尾に _### 形式でステータスコードを付与したものを使用する。
それがない場合、 _#00 形式でステータスグループを付与したものを使用し、それもない場合はテンプレートファイルそのものを使用する。
例外時表示テンプレートには、SdC(sdc)、例外レベル(exceptiontype)、例外そのもの(exception) の他、以下の情報が引き継がれる。
例外クラスに postAction というメソッドがあればそれを実行します(後述)
その例外特化の処理(特殊なログを出力したり、メールを送信したり)が必要であれば該当メソッドを実装すれば自動で実施します。
通常は何も行いません。
通常の例外クラスも設定にて指定することで本例外処理に組み込む事ができる。
本例外処理用の基本クラスで、基幹クラスとして使用することができる。
SdInterruptException、SdRestartException、SdRetryException は各例外レベルに対する実装で、postAction() でログ出力を実行している他は特別な処理は行っていない。
20181221