2012-03-29 29 views
0

我有一個編輯特許經營的模板。在這個模板裏面我有兩件事:一個嵌入式控制器向我展示一個彙總表,其中包含已經存儲在數據庫中的所有特許經營權,每行有一個「編輯」按鈕,表格中填充了特許經營的數據正在編輯。Symfony2嵌入式控制器和表單驗證問題

問題是,當我處理表單並且驗證失敗時,由嵌入式控制器創建的彙總表向我顯示了我試圖用我在表單中輸入的值修改的特許經營權,即使它沒有沒有通過驗證,數據庫從未更新過。

的代碼具有一定的西班牙語單詞所以,只是爲了澄清,「franquicia」是指「特許」

用於呈現和驗證形式的方法是:

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)); 
} 

由嵌入中所使用的方法控制器是:

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

非常感謝人,它的工作! – 2012-03-31 23:47:55