2013-12-02 17 views
7

Symfony 2でコントローラとshow flashメッセージで例外をキャッチする方法は?symfony 2でExceptionを捕まえるには?

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

http://stackoverflow.com/questions/5689415/symfony2-controller-wont-catch-exception – Asif

+0

のtoString($ e)が動作していません。それは を示しています。FatalErrorException:エラー:未定義の関数toString()を呼び出します。 – Swass

+0

'echo(string)$ e;'またはそれ以上のものは、生産的なサイトで電子メールを送ります: 'mail('[email protected] '、'例外スクリプト... '、var_export($ e、true)); ' – DanFromGermany

答えて

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'では削除されました。いくつかの編集を考えてください – Trix

+0

Thx、私は自分の投稿を更新しました。 –

3

これを注意深く読んで、例外をキャッチし、その小枝に出力を生成することは、ここで明確に述べられています。さらに:)

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

あなたはクラスのメソッドを取得するには、この原始的な方法を使用することができます。

print_r(get_class_methods($e)) 

またはこれかなり

\Doctrine\Common\Util\Debug::dump($e); 
関連する問題