Как перехватить исключение в контроллере и показать флеш-сообщение в 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
?
Вы должны позаботиться об исключениях, которые могут быть подняты:
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 eg 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(), )); }
Прочтите это внимательно, здесь четко описаны исключения и генерация вывода на веточке. 🙂
http://symfony.com/doc/current/book/controller.html
в дальнейшем,
вы можете использовать этот примитивный метод для получения методов класса:
print_r(get_class_methods($e))
или это довольно печатать ваш объект
\Doctrine\Common\Util\Debug::dump($e);