php - 保存实体时捕获教义异常
问题描述
在深入研究 Doctrine 的异常处理时,我偶然发现了这个代码示例,这让我想知道这是否是矫枉过正或可能有一些用处:
// Save entity
try {
$em->persist($someEntity);
$em->flush();
$this->logger->info("Saved someEntity");
} catch (DBALException $e) {
$this->logger->addError("DBALException [{code}]: {message}",
array('code' => $e->getCode(), $e->getMessage()));
} catch (PDOException $e) {
$this->logger->addError("PDOException [{code}]: {message}",
array('code' => $e->getCode(), $e->getMessage()));
} catch (ORMException $e) {
$this->logger->addError("ORMException [{code}]: {message}",
array('code' => $e->getCode(), $e->getMessage()));
} catch (Exception $e) {
$this->logger->addError("Exception [{code}]: {message}",
array('code' => $e->getCode(), $e->getMessage()));
}
我总是只使用通用异常(代码示例中的最后一个),并且想知道在大多数情况下这是否是矫枉过正,除非人们想以不同的方式处理定义的异常之一?
解决方案
我认为这并不过分,因为在某些特定情况下,您需要了解保存实体会产生哪个错误。
例如,如果您因为创建自定义查询而对参数编号有疑问,您可能想知道是PDO
问题还是DBAL
问题,以了解在哪里更改代码。
在许多情况下,您不需要所有这些异常,但在其他情况下,了解代码的哪一部分无法准确修复错误很重要。
您发布的内容是关于如何捕获异常的罕见示例,但对我来说,当您遇到一个非常深刻和复杂的问题时,清楚和更快地了解生成哪个异常以及来自哪个供应商/依赖项/库非常重要
推荐阅读
- python - 专用 IP 地址的正则表达式
- python - 用于搜索所有正在运行的 EC2 实例的 Lambda 函数,如果不存在则添加标签“名称”,然后将标签添加到它的关联卷?
- javascript - 重构所有 Vue 组件导入以附加 .vue 扩展名
- delphi - TIdSMTP:如何修复错误 SSL 协商失败
- node.js - 无法使用nodejs收听服务器端websocket上发出的数据
- reactjs - React Native 0.64 FBReactNativeSpec SyntaxError: Unexpected token ) PhaseScriptExecution
- node.js - 服务器发送的事件未在 Google App Engine 上发送,但在本地工作正常。如何从服务器发送多条消息?
- flutter - Dart 中的 Twitter API 2.0 Conversation_id
- javascript - Nodejs:构建以优化 .min.js 模块?
- reinforcement-learning - 线性函数逼近的特征选择