在保存实体时捕获原则例外



在深入研究 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问题,以了解在何处更改代码。

在许多情况下,您不需要所有这些异常,但在其他情况下,了解代码的哪一部分完全无法修复错误非常重要。

您发布的是有关如何捕获异常的罕见示例,但是对于我而言,当您陷入一个非常深刻和复杂的问题时,清晰快速地了解哪个异常生成以及来自哪个供应商/依赖项/库非常重要

相关内容

  • 没有找到相关文章

最新更新