首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何捕获Doctrine\DBAL\Exception\ConnectionException?

如何捕获Doctrine\DBAL\Exception\ConnectionException?
EN

Stack Overflow用户
提问于 2021-01-31 03:53:04
回答 3查看 228关注 0票数 0

我的数据库凭证是正确的,并且一切正常。但有时mysql服务器宕机,如果发生这种情况,我希望向我的api使用者/用户显示一条自定义的错误消息,并且我得到了Doctrine\DBAL\Exception\ConnectionException

不幸的是the database connection is lazy loaded,所以直到第一次$em->flush()调用才建立连接。显然,不可能将每个包含$em->flush()的服务都包装在try catch块中。

如何处理这类数据库错误呢?

EN

回答 3

Stack Overflow用户

发布于 2021-02-04 06:14:19

在没有太多信息的情况下,只能提出一个模糊的答案,所以这里是我的尝试:

我假设您使用一个或多个控制器或其他概念的入口点来处理用户请求。这就是我最终看到错误处理的地方:在应用程序边缘的代码层,也是用户的“网关”。如果它是一个单一的控制器,你显然可以在你的业务逻辑中添加try/catch调用。如果它是多个控制器,你将需要添加try/catch到所有的控制器,这可能是相当麻烦的,所以让所有请求都通过的一段代码可能是有意义的。这种方法的一个好处是,这并不局限于Doctrine,但您可能还希望以这种方式处理其他错误。

如果您使用Symfony框架,那么这样的异常处理程序非常简单,因为它们正是这样做的:使用处理所有请求的公共基础架构代码(名为HttpKernel),并为所有冒泡到此基础架构代码的异常提供异常处理机制。如果你不想使用Symfony,看看源代码(https://github.com/symfony/symfony)或者文档(https://symfony.com/doc/current/index.html)可能对你的灵感有帮助。

如果您只捕获特定的异常类型或所有内容(\Exception或甚至\Throwable),当然由您决定。我个人希望避免在我的代码库中有太多的库依赖项,所以我会将它们包装在自定义异常中。

票数 1
EN

Stack Overflow用户

发布于 2021-02-08 18:59:16

如果您使用某种框架,那么它可能定义了一个错误处理程序。您应该考虑扩展这个错误处理程序来处理您的错误,并向您的用户显示一个漂亮的页面。

如果您没有使用任何框架,请查看如何在PHP中做到这一点:https://www.php.net/manual/fr/function.set-error-handler.php

显然,你可能有一些情况下拥有数据库是至关重要的,你将需要一个接一个地处理每个案例:这里没有神奇的解决方案,对不起。

票数 0
EN

Stack Overflow用户

发布于 2021-01-31 03:59:09

看一看另一个问题可以解决你的问题

Catch db error with Doctrine\DBAL\Exception

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65972476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档