Как поймать Exception в Symfony 2?

7

Как перехватить исключение в контроллере и показать флеш-сообщение в Symfony 2?

try{
  $em = $this->getDoctrine()->getManager();
  $em->persist($entity);
  $em->flush();

  return $this->redirect($this->generateUrl('target page'));
} catch(\Exception $e){
  // What to do in this part???
}

return $this->render('MyTestBundle:Article:new.html.twig', array(
  'entity' => $entity,
  'form'   => $form->createView(),
));

Что делать в блоке catch?

  • 0
    stackoverflow.com/questions/5689415/...
  • 0
    toString ($ e) не работает. Это показывает FatalErrorException: Ошибка: вызов неопределенной функции toString ()
Показать ещё 1 комментарий
Теги:

2 ответа

13
Лучший ответ

Вы должны позаботиться об исключениях, которые могут быть подняты:

public function postAction(Request $request)
{
  // ...

  try{
    $em = $this->getDoctrine()->getManager();
    $em->persist($entity);
    $em->flush();

    return $this->redirect($this->generateUrl('target page'));

  } catch(\Doctrine\ORM\ORMException $e){
    // flash msg
    $this->get('session')->getFlashBag()->add('error', 'Your custom message');
    // or some shortcut that need to be implemented
    // $this->addFlash('error', 'Custom message');

    // error logging - need customization
    $this->get('logger')->error($e->getMessage());
    //$this->get('logger')->error($e->getTraceAsString());
    // or some shortcut that need to be implemented
    // $this->logError($e);

    // some redirection e. g. to referer
    return $this->redirect($request->headers->get('referer'));
  } catch(\Exception $e){
    // other exceptions
    // flash
    // logger
    // redirection
  }

  return $this->render('MyTestBundle:Article:new.html.twig', array(
    'entity' => $entity,
    'form'   => $form->createView(),
  ));
}
  • 0
    getRequest Устаревший с Symfony 2.4 и Удаленный с Symfony 3.0 . Пожалуйста, рассмотрите возможность редактирования
  • 0
    Спасибо, я обновил свой пост.
3

Внимательно прочитайте это, здесь четко обозначены исключения и генерация вывода в ветке.:)

http://symfony.com/doc/current/book/controller.html

дальше,

вы можете использовать этот примитивный метод для получения методов класса:

print_r(get_class_methods($e))

или это, чтобы печатать ваш объект

\Doctrine\Common\Util\Debug::dump($e);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню