php - 保存实体时捕获 Doctrine 异常

标签 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()));
        }

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

最佳答案

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

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

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

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

关于php - 保存实体时捕获 Doctrine 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50319838/

相关文章:

php - 如何将 HTTP 身份验证添加到基于 PHP 的 Heroku 应用程序?

php - 替换 notFoundHandler 设置

javascript - 如何在新的 Google Calendar v3 API 结果上使用 PHP 的 'json_decode'?

php - Doctrine2 从特征中复制属性和方法

doctrine-orm - Doctrine 2 重复检测

PHP/MySQL - 时区中的当前日期/时间

php - Symfony2 FOSbundle : record every user login date

symfony - 更新后刷新缓慢(Doctrine ORM + Symfony 2)

php - 弄清楚如何配置特定的 services.yml 值 - Symfony2

mysql - Doctrine - 查询构建器使用数组设置参数(嵌套/多个值)