2012-09-01 87 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