为什么Symfony2不捕获异常?

3
我有一个代码仓库。
class TurnoRepository extends EntityRepository
{
    public function findTurnoActivo()
    {
        $q = $this
            ->createQueryBuilder('t')
            ->where('t.activo = :activo')
            ->setParameter('activo', true)
            ->getQuery();

        return $q->getSingleResult();
    }
}

这个方法会抛出一个NoResultException,但如果我在控制器中尝试捕获

private function obtenerTurno()
{
    $em = $this->getDoctrine()->getEntityManager();
    $turno = null;

    try {
        $turnoActivo = $em->getRepository('MyBundle:Turno')->findTurnoActivo();
    } catch (NoResultException $e) {
        return false;
    }

    return $turno;

我总是在我的网页上遇到500内部服务器错误。


dev环境下运行您的应用程序,以查看确切的错误消息。 - Crozin
2个回答

10

Symfony2的代码是有命名空间的,因此您必须为类NoResultException添加正确的命名空间,尝试使用:

catch (\Doctrine\ORM\NoResultException $e)

请注意在Doctrine命名空间前的反斜杠,或者使用use导入NoResultException类。


1
是的,我忘记了 use Doctrine\ORM\NoResultException; - rkmax

4

如果您不想在控制器中捕获NoResultException,那么可以使用$q->getOneOrNullResult();


我更喜欢使用异常处理来处理业务逻辑。 - rkmax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接