0

PDOException特に symfony 2.6 でキャッチしたいですConnectionException

たとえば、MySQL サーバーを停止した場合、その例外をキャッチしてカスタマイズされたメッセージをユーザーに返したいのですが、カスタマイズされた kernel.exception listner ではキャッチできないようで、try catch ブロックでも、それがsymfonyの問題か何かをしなければなりません。

また、ドキュメントに記載されているようにエラーページをカスタマイズしようとしましたが、私は解決策をウェブで探しましたが、例外をエラーページに変換する責任があるフレームワークバンドルでコントローラーを再定義すること以外は何も見つかりませんでした。

しかし、私は symfony を初めて使用するので、その解決策を取りたくありません。

4

1 に答える 1

1

これを行うには、例外リスナーを作成して Pdo 例外をキャッチします。

service.yml:

kernel.listener.your_pdo_listener:
        class: Acme\AppBundle\EventListener\YourExceptionListener
        tags:
           - { name: kernel.event_listener, event: kernel.exception, method: onPdoException }

次にリスナークラス:

YourExceptionListener

更新しました

use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
class YourExceptionListener
{
     public function onPdoException(GetResponseForExceptionEvent $event)
     {
          $exception = $event->getException();

          if ($exception instanceof \PDOException || $exception->getPrevious() instanceof \PDOException) {
              //now you can do whatever you want with this exception
          }
     }
}

からのスニペット: Symfony2 でデータベースの例外をキャッチする

私はさらにテストを行ったので、最初に行ったテストはデータベースへのクエリを作成することでした。そのため、最初の例外として pdoexception を取得しましたが、データベースに接続できなかった場合に twig がランタイム例外をスローすることを知っているため、twig 例外になることがあります。しかし、うまくいけば、以前の例外も取得でき、これは PDO の後にスローされる可能性のある他の例外で機能する可能性があるため、期待どおりに機能することを願っているので、以前の例外が PDOException であるかどうかを確認するようにコードを編集しました。

于 2015-05-19T07:21:07.103 に答える