7

このドキュメントページによると:

http://symfony.com/doc/current/cookbook/controller/error_pages.html

SymfonyはTwigBundleを使用して例外の表示を制御します。ただし、ドキュメントに記載されているように、表示をカスタマイズすることは考えていません。これをオーバーライドすることを考えています。私は小さなRESTAPIに取り組んでおり、バンドルへのTwigBundleの呼び出しをオーバーライドして、独自の例外処理を行いたいと考えていました(RESTに関して:正しいHTTPステータスコードとプレーンテキストの本文応答をマップします)。

これについては何も見つかりませんでした。マニュアルのリファレンスは、特にカーネルの部分ではそれほど良くありません。多分誰かがすでにこれをして、私を助けることができますか?ありがとう。

4

2 に答える 2

13

kernel.exceptionイベントをリッスンするリスナーを作成する必要があります。そのonKernelExceptionリスナーのメソッドでは、例外をチェックできます。

例外リスナークラスについて

  //namespace declarations
  class YourExceptionListener
  {

      public function onKernelException(GetResponseForExceptionEvent $event)
      {
        $exception =  $event->getException();
        if ($exception instanceof YourException) {
            //create response, set status code etc.
            $event->setResponse($response); //event will stop propagating here. Will not call other listeners.
        }
      }
  }

サービス宣言は

 //services.yml
 kernel.listener.yourlisener:
  class: FQCN\Of\YourExceptionListener
  tags:
    - { name: kernel.event_listener, event: kernel.exception, method: onKernelException }
于 2012-04-26T15:52:19.793 に答える
1

以下は、JSONリクエストのSymfonyによる内部例外キャッチを無効にするための私のAppKernel.phpの一部です(handle2番目のメソッドを作成する代わりにメソッドをオーバーライドできます)

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;

class AppKernel extends Kernel {
  public function init() {
    parent::init();

    if ($this->debug) {
      // workaround for nasty PHP BUG when E_STRICT errors are reported
      error_reporting(E_ALL);
    }
  }

  public function handleForJson(Request $request,
                                $type = HttpKernelInterface::MASTER_REQUEST,
                                $catch = true
  ) {
    return parent::handle($request, $type, false);
  }
  ...
于 2012-04-26T15:40:59.683 に答える