попробовать catch не поймать исключение? - PullRequest
12 голосов
/ 19 декабря 2010

У меня есть код как показано ниже

try {
  $user = $query->getSingleResult();
} catch (Doctrine\ORM\NoResultException $e) {
  return null;
} catch (Exception $e) {
  return null;
}

getSingleResult() сгенерирует NoResultException, если строки не найдены. и, кажется, я все еще получаю исключение ... улов, похоже, не работает. почему это?

Ответы [ 2 ]

34 голосов
/ 19 декабря 2010

Если ваш код имеет пространство имен, попробуйте использовать:

catch (\Doctrine\ORM\NoResultException $e)

Обратите внимание на обратную косую черту перед пространством имен Doctrine.

Причина, по которой вам нужно это сделать, заключается в том, что пространства имен PHP относительновместо абсолютного.

Если ваш код имеет пространство имен My\Namespace и вы пытаетесь перехватить Doctrine\ORM\NoResultException, на самом деле он пытается перехватить My\Namespace\Doctrine\ORM\NoResultException.

Префиксом пространства имен соно абсолютное (похоже на unix pathnames)

2 голосов
/ 28 ноября 2014

Также возможно добавить

 use Exception;

в верхней части класса, и это разрешит имя класса исключения, используемое в блоке try / catch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...