首页 > 解决方案 > 保存实体时捕获教义异常

问题描述

在深入研究 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()));
        }

我总是只使用通用异常(代码示例中的最后一个),并且想知道在大多数情况下这是否是矫枉过正,除非人们想以不同的方式处理定义的异常之一?

标签: phpsymfonydoctrine-ormdoctrine

解决方案


我认为这并不过分,因为在某些特定情况下,您需要了解保存实体会产生哪个错误。

例如,如果您因为创建自定义查询而对参数编号有疑问,您可能想知道是PDO问题还是DBAL问题,以了解在哪里更改代码。

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

您发布的内容是关于如何捕获异常的罕见示例,但对我来说,当您遇到一个非常深刻和复杂的问题时,清楚和更快地了解生成哪个异常以及来自哪个供应商/依赖项/库非常重要


推荐阅读