2012-09-01 86 views
3

我有一个仓库为什么Symfony2的不捕捉异常

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内部我的页面上的服务器错误

+0

在'dev'环境中运行你的应用程序,看看有什么确切的错误信息。 – Crozin

回答

8

Symfony2代码是命名空间,所以你必须添加正确的命名空间的类NoResultException,请尝试使用:

catch (\Doctrine\ORM\NoResultException $e) 

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

+1

是的,我忘记了'使用Doctrine \ ORM \ NoResultException;' – rkmax

4

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

+0

我更喜欢这个异常,对于业务逻辑 – rkmax