我想在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。
标题>标题>