如何在控制器中捕获异常并在Symfony 2中显示flash消息?
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 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(), )); }