symfony2 无法捕获 PDOException



我想在symfony 2.6中捕获PDOException,特别是ConnectionException

例如,如果我停止MySQL服务器,我想捕获该异常并返回自定义消息给用户,但似乎在自定义内核中无法捕获。异常监听器,或者在try catch块中,我不知道这是symfony问题还是必须做些什么。

我也试着自定义错误页面,就像在文档中说的,但毫无意义,我在网上搜索解决方案,但我发现除了在frameworkbundle中重新定义一个控制器,负责将异常转换为错误页面。

但是我真的不想用这个方法,因为我是symfony的新手。

您可以通过创建异常侦听器并捕获Pdo异常来实现这一点:

<标题> service.yml:
kernel.listener.your_pdo_listener:
        class: AcmeAppBundleEventListenerYourExceptionListener
        tags:
           - { name: kernel.event_listener, event: kernel.exception, method: onPdoException }

然后监听器类:

<标题> YourExceptionListener h1> 更新
use SymfonyComponentHttpKernelEventGetResponseForExceptionEvent;
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作为第一个异常,但有时它可以是一个小树枝异常,因为你知道小树枝抛出运行时异常,如果它不能联系数据库,但希望我们能得到以前的异常也,这可以与其他异常一起工作,可以在PDO之后抛出,所以希望它能像预期的那样为你工作,所以我编辑了代码来检查以前的异常是否也是PDOException。

相关内容

  • 没有找到相关文章

最新更新