1

私は現在、フロント コントローラー パターンを実装する MVC アプリケーションに取り組んでいます。

プロセスは次のように機能します。

  1. リクエストを受け付けます
  2. リクエストは RequestObject に変換されます
  3. RequestObject がディスパッチャーに渡される
  4. 次に、Dispatcher が必要なコントローラーをルーティングして呼び出します。
  5. コントローラは結果を ResponseObject で返します。
  6. その後、Dispatcher は ResponseObject をアプリケーションの「フロント」に返します。
  7. 出力はエコーアウトされます。

特殊なケースがあります (ajax およびフラッシュ フロントエンドの場合):

  1. ディスパッチャーは、リクエストが「エンドポイント」コントローラーに送信されたことを確認します。
  2. 次に、エンドポイント コントローラーは、上記のように、実際に要求されたコントローラーに要求をディスパッチします。
  3. 次に、requestObject がエンドポイント コントローラに返されます。
  4. 次に、エンドポイント コントローラーが JSON または AMF エンコーディングを実行し、これがエコーされます。
  5. その後、スクリプトはexit();で終了します。

ExceptionHandlerクラスを作成してに登録しましたset_exception_handlerErrorHandlerを作成し、を使用すると同時にset_error_handler、すべてのエラーが変換され、例外としてスローされます。

これはすべてうまく機能します。ExceptionHandlerただし、これらの例外のいずれかをキャッチすると、問題に苦労しています。ではExceptionHandler、ResponseObject が変更され、500 エラーをスローする必要があるという事実が反映されます。

何らかの形でから ResponseObject を返したいExceptionHandlerので、返された ResponseObject はディスパッチャーによって「キャッチ」され、「エンドポイント」コントローラーまたは「フロント」コントローラーによって JSON または AMF 応答にレンダリングまたは変換されます。

これは可能ですか?もしそうなら、これを行う最善の方法は何ですか?

4

1 に答える 1

0

それは不可能です。http://php.net/set_exception_handlerに記載されているとおり

exception_handler が呼び出された後、実行は停止します。

正しい方法はtry-catch、コントローラのディスパッチ メソッドが呼び出される場所に、ブロックをディスパッチャに追加することです。

于 2013-04-28T20:56:46.930 に答える