symfony2无法捕获PDOException

时间:2015-05-19 00:13:25

标签: symfony connectionexception

我想在symfony 2.6中捕获PDOException,尤其是ConnectionException

例如,如果我停止我的MySQL服务器,我想捕获该异常并向用户返回一个自定义消息,但它似乎在定制的kernel.exception列表器中无法捕获,并且在try catch块中,我不知道这是一个symfony问题还是必须要做的事情。

我也尝试过自定义错误页面,就像在文档中说的那样,但是我在网上搜索解决方案,但除了在frameworkbundle中重新定义控制器之外我什么也没找到,而且负责将Exception转换为错误页面。

但我真的不想去寻找解决方案,因为我是symfony的新人。

1 个答案:

答案 0 :(得分: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
          }
     }
}

来自:Catching database exceptions in Symfony2

的摘录

我做了更多的测试,所以我首先做的测试是对数据库进行查询,这就是为什么我得到pdoexception作为第一个异常,但有时它可能是一个twig异常,因为你知道twig throw运行时异常,如果它不能'联系数据库,但希望我们也可以得到以前的异常,这可以用于PDO之后可以抛出的其他异常,所以希望它能按预期工作,所以我编辑代码来检查以前的异常是否是PDOException还