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