2013-09-26 3 views
1

Как использовать «NotFoundException» в классе репозитория в Symfony2?Как получить объект контроллера в классе репозитория в symfony2

$test = $em->getRepository('DemoBundle:Test')->find(1); 

if (!$test) { 
    throw $this->createNotFoundException('The category area does not exist. Id 1'); 
} 
+0

Почему бы вам не сделать это в своем действии над вашим действием? – pbenard

ответ

2

Если вы хотите бросить соответствующий исключение (в/внутри/внутри) вашего Repository, когда ваш запрос не имеет никакого результата. Затем вы должны использовать Doctrine\ORM\NoResultException.

Кстати, фрагмент кода, который вы использовали, не должен использоваться в вашем репозитории.

+0

Из документации, приведен пример кода: $ query = $ em-> createQuery ('SELECT ...') -> setMaxResults (1); try { $ product = $ query-> getSingleResult(); } catch (\ Doctrine \ Orm \ NoResultException $ e) { $ product = null; } – Acyra

1

Другой способ обработки ошибок ошибки использования сеанса, как

try { 
      $em = $this->getDoctrine()->getManager(); 
      $entity = $em->getRepository('product')->find($id); 

      if (!$entity) { 
       $this->get('session')->setFlash('warning', 'Unable to find Product.'); 
      } 

      $em->remove($entity); 
      $em->flush(); 
      $this->get('session')->setFlash('success', 'Product Detail has been deleted.'); 
      return $this->redirect($this->generateUrl('admin_products')); 
     } catch (\Doctrine\DBAL\DBALException $e) { 
      $this->get('session')->setFlash(
        'warning', 'This Product cannot be deleted!' 
      ); 
      return $this->redirect($this->getRequest()->headers->get('referer')); 
     } 
    } 

И на Вашем шаблоне веточку ниже данного кода.

{% if app.session.hasFlash('success') %} 
    <div class="alert alert-success"> 
    {{ app.session.flash('success') }} 
     </div> 

{% endif %} 
    {% if app.session.hasFlash('warning') %} 
     <div class="alert alert-error"> 
    {{ app.session.flash('warning') }} 
      </div> 

{% endif %} 
Смежные вопросы