私は現在、フロント コントローラー パターンを実装する MVC アプリケーションに取り組んでいます。
プロセスは次のように機能します。
- リクエストを受け付けます
- リクエストは RequestObject に変換されます
- RequestObject がディスパッチャーに渡される
- 次に、Dispatcher が必要なコントローラーをルーティングして呼び出します。
- コントローラは結果を ResponseObject で返します。
- その後、Dispatcher は ResponseObject をアプリケーションの「フロント」に返します。
- 出力はエコーアウトされます。
特殊なケースがあります (ajax およびフラッシュ フロントエンドの場合):
- ディスパッチャーは、リクエストが「エンドポイント」コントローラーに送信されたことを確認します。
- 次に、エンドポイント コントローラーは、上記のように、実際に要求されたコントローラーに要求をディスパッチします。
- 次に、requestObject がエンドポイント コントローラに返されます。
- 次に、エンドポイント コントローラーが JSON または AMF エンコーディングを実行し、これがエコーされます。
- その後、スクリプトは
exit();で終了します。
ExceptionHandlerクラスを作成してに登録しましたset_exception_handler。ErrorHandlerを作成し、を使用すると同時にset_error_handler、すべてのエラーが変換され、例外としてスローされます。
これはすべてうまく機能します。ExceptionHandlerただし、これらの例外のいずれかをキャッチすると、問題に苦労しています。ではExceptionHandler、ResponseObject が変更され、500 エラーをスローする必要があるという事実が反映されます。
何らかの形でから ResponseObject を返したいExceptionHandlerので、返された ResponseObject はディスパッチャーによって「キャッチ」され、「エンドポイント」コントローラーまたは「フロント」コントローラーによって JSON または AMF 応答にレンダリングまたは変換されます。
これは可能ですか?もしそうなら、これを行う最善の方法は何ですか?