2012-03-29 19 views
0

私はフランチャイズを編集するためのテンプレートを持っています。そのテンプレートの中に私は2つのことがあります:データベースに既に保存されているすべてのフランチャイズを持つサマリーテーブルを表示し、各行に「編集」ボタンがあり、フランチャイズのデータ​​で満たされたフォームを表示する組込みコントローラ現在編集中です。Symfony2エンベデッドコントローラとフォーム検証の問題

問題は、フォームを処理して、検証が失敗した場合、エンベデッドコントローラによって作成されたサマリーテーブルは、私がフォームに入力した値で修正しようとしているフランチャイズを表示します検証に合格しておらず、データベースは更新されませんでした。埋め込みで使用

public function editarAction($superusuario_id, $franquicia_id) 
{ 
    $request = $this->getRequest(); 

    $em = $this->getDoctrine()->getEntityManager(); 
    $franquicia = $em->getRepository('FacturaBundle:Franquicia')->findOneById($franquicia_id); 

    $form = $this->createForm(new FranquiciaType(), $franquicia); 

    if($request->getMethod() == 'POST') 
    { 
     $form->bindRequest($request); 
     if($form->isValid()) 
     { 
      $em = $this->getDoctrine()->getEntityManager(); 
      $em->persist($franquicia); 
      $em->flush(); 
      return $this->redirect($this->generateUrl('s_listar_franquicias', array('superusuario_id'=>$superusuario_id))); 
     } 
    } 

    return $this->render('FacturaBundle:Superusuario:franquicia-editar.html.twig', 
        array('superusuario_id'=>$superusuario_id, 
         'franquicia_id'=>$franquicia_id, 
         'form'=>$form->createView(), 
         'franquicia'=>$franquicia)); 
} 

方法:

コードは単に明確化のため、ので、いくつかのスペイン語の単語を有し、「franquicia」は「フランチャイズ」

をフォームをレンダリングし、検証するための方法があることを意味しますコントローラは次のとおりです。

public function listarTodasAction($superusuario_id) 
{ 
    $em = $this->getDoctrine()->getEntityManager(); 
    $franquicias = $em->getRepository('FacturaBundle:Franquicia')->findAll(); 

    return $this->render('FacturaBundle:Superusuario:franquicia-listar-todas.html.twig', array('superusuario_id'=>$superusuario_id, 'franquicias'=>$franquicias)); 
} 

必要であれば、それは長すぎるのですが、私はそれを行いますので、私はテンプレートのコードを貼り付けていませんよ。

誰でも手伝ってもらえますか?

答えて

2

基本的な問題は、$ form-> bindRequestが実際に$ franquiciaを投稿情報で更新することです。 D2はすべてをキャッシュして、変更が後で表示されるようにします。更新を使用して元のデータに戻します。

if($form->isValid()) 
    { 
     ... 
    } 
    $this->getDoctrine()->getEntityManager()->refresh($franquicia); 
+0

ありがとうございました。 –

関連する問題