2

私が取り組んでいるプロジェクトの1つでは、バンドルごとにカスタム404ページを実装する必要があります。

ドキュメント内には、そのような機能については何も言及されていません。

私は何人かの同僚とこの問題について話し合っていて、kernel.exceptionイベントを使用する必要があると言われました。残念ながら、これにはバンドルが呼び出している情報がありません。

私見では、これはsymfonyルーターコンポーネントにパッチを適用することで修正する必要があります。これにより、開発者はケースをさらに処理できるキャッチオールルートを指定できます。

もう1つのオプションは、RouterInterface :: matchメソッドの動作を変更して、一致したパスとそれに一致したバンドルを含む一貫した出力を返すことです。現在、これは不可能です。一致が失敗した場合に例外がスローされ、情報がまったく提供されないためです。

たとえば、「/api」で始まるURLを処理するように定義されたApiBundleがあります。現在、これを処理してカスタム404ページを設定する唯一の方法は、kernel.exceptionおよびpreg_match()のURLでリクエストを取得することです。ただし、これはハードコーディングであり、バンドルにはそのような知識がないため、避ける必要があります。これは、app / config/routingファイルで定義されています。

あなたの意見は何ですか?
他の回避策もいただければ幸いです。

4

1 に答える 1

1

'ourCompany.exception_response'というイベントをディスパッチするカスタムExceptionControllerを実装することになりました。

  • デフォルトのバンドルには、優先度-1024のリスナーが設定されています。
  • カスタムバンドルが例外を処理してその応答を設定する場合、イベントにマークを付け、伝播を停止する必要があります。
  • カスタムバンドルは、サービスコンテナを使用して、例外を処理するかどうかを決定するために必要なものを取得できます。
于 2013-02-05T15:08:15.347 に答える