Перехват исключений доктрины при сохранении сущности - PullRequest
0 голосов
/ 13 мая 2018

Разбираясь с обработкой исключений 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 голосов
/ 13 мая 2018

Я думаю, что это не излишнее, потому что в некоторых конкретных случаях вам нужно понимать, какую ошибку он генерирует при сохранении сущности.

Например, если у вас есть проблема с числом параметров, потому что вы создаете пользовательский запрос, вам может быть интересно узнать, является ли проблема PDO или DBAL, чтобы понять, где изменить код.

Во многих случаях вам не нужно все это исключение, но в другом случае важно понять, какая часть вашего кода не в состоянии точно исправить ошибку.

То, что вы опубликовали, является редким примером того, как поймать исключение, но для меня, когда вы сталкиваетесь с очень глубокой и сложной проблемой, очень важно четко и быстро понять, какое исключение генерируется и из какого поставщика / зависимости / библиотека

...