我的代码如下
try {
$user = $query->getSingleResult();
} catch (Doctrine\ORM\NoResultException $e) {
return null;
} catch (Exception $e) {
return null;
}
如果没有找到行, getSingleResult()
将抛出NoResultException
。似乎我仍然得到例外......捕获似乎不起作用。那是为什么?
答案 0 :(得分:34)
如果您的代码是命名空间,请尝试使用:
catch (\Doctrine\ORM\NoResultException $e)
请注意Doctrine命名空间前面的反斜杠。
你需要这样做的原因是因为PHP的命名空间是相对的,而不是绝对的。
如果您的代码已命名为My\Namespace
,并且您尝试捕获Doctrine\ORM\NoResultException
,则实际上它会尝试捕获My\Namespace\Doctrine\ORM\NoResultException
。
通过在名称空间前加上\,使其成为绝对名称(类似于unix pathnames)
答案 1 :(得分:2)
还可以添加
use Exception;
在类的顶部,它将解析try / catch块中使用的Exception类名。