0

我想赶上PDOExceptionsymfony 2.6,尤其是ConnectionException.

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

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

但我真的不想去那个解决方案,因为我是 symfony 的新手。

4

1 回答 1

1

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

服务.yml:

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

然后监听类:

你的异常监听器

更新

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 回答