为什么Symfony2不会捕获异常

时间:2012-09-01 15:40:51

标签: php symfony exception-handling

我有一个存储库

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内部服务器错误

2 个答案:

答案 0 :(得分:9)

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

catch (\Doctrine\ORM\NoResultException $e)

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

答案 1 :(得分:4)

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