保存实体时捕获学说异常

时间:2018-05-13 19:22:39

标签: php symfony doctrine-orm doctrine

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

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

1 个答案:

答案 0 :(得分:3)

我认为这不是一种矫枉过正,因为在某些特定情况下,您需要了解通过保存实体产生的错误。

例如,如果您因创建自定义查询而遇到参数编号问题,则可能想知道是否存在PDO问题或DBAL问题,以了解更改代码的位置。< / p>

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

你发布了什么是一个关于如何捕获异常的罕见示例,但对于我来说,当你遇到一个非常深刻和复杂的问题时,要清楚地了解哪个异常生成以及从哪个供应商/依赖/图书馆