2016-04-16 43 views
0

我在窗口7中使用symfony3: 此方法應該適用於動作更新和添加,但其行爲僅適用於插入。而我也設置$ ID。爲什麼更新並插入相同的方法在symfony中不起作用?

/** 
    * @Route("entity/entity/{id}", name="entity_entity",defaults={"id" = 0})  
    */ 
    public function entityAction(Request $request,$id){ 
     $action = false; 
     $arr_XYZ_data = array(); 
     $arr_XYZ_prepare_data = array();  
     $form_title = 'Add New XYZ'; 
     $obj_XYZ = new XYZ();    
     $form = $this->createForm(XYZType::class, $obj_XYZ); 
     if($id!=0){ 
      $obj_repo = $this->getDoctrine()->getRepository('AppBundle:XYZ'); 
      $arr_XYZ_data = $obj_repo->find($id);   
      if($arr_XYZ_data){ 
      $action = true; 
      $form_title = 'Update XYZ';     
      $arr_XYZ_data = $obj_repo->findXYZById($id);   
      $arr_XYZ_prepare_data = $this->_prepareData($arr_XYZ_data); 
      } 
     } 
     $form->handleRequest($request);    
     if (($form->isSubmitted())) {   
      $obj_XYZ->setXYZId($id); 
      $str_hiddenfield_result = $form->get('extraformfield')->getData(); 
      $arr_hiddenfield_result = explode('&',$str_hiddenfield_result);  
      $obj_XYZ->setDef($obj_XYZ->getDef()->getDefId()); 
      $obj_XYZ->setAbc($arr_hiddenfield_result[3]); 
      $obj_XYZ->setAuthor(1); //ldap session value 
      $em = $this->getDoctrine()->getManager(); 
      $em->persist($obj_XYZ);   
      $em->flush();     

      $this->addFlash('success', 'Your record has been added successfully!'); 
      return $this->redirectToRoute('XYZ_index', array(), 301); 
     } 
    } 

任何人都可以建議我如何實現這一目標?

回答

2

一些言論:

  • 你叫正確的URL(與$id != 0)?
  • 檢查提交的表單在做任何事之前是否有效。
  • 你爲什麼要在實體上調用setId()? Doctrine將設置一個新的持久實體的ID。

最後,您正在使用301重定向,它是一個永久重定向。這意味着瀏覽器會將任何請求重定向到entity/entity/{id},並將其轉發給由XYZ_index生成的任何URL。

我建議以下幾點:

  • 使用isValid而不是isSubmitted的形式(也可能是無效的,但你堅持它的數據!)。
  • 使用內置的Form s,您可以使用實體加載(這樣您就不必自己處理數據字段)。
  • 返回$this -> redirectToRoute('...', array(...))而不是301
+0

我檢查的isValid其返回假出事了。如何獲得字符串中的所有表單錯誤,你可以建議我嗎? –

+0

檢查開發人員調試工具欄。它將列出提交表單的表單錯誤。它也應該列出Twig輸出中的錯誤,如果你使用'{{form_errors(form)}}'(並且你應該向用戶顯示錯誤!) – Hidde

+0

我發現了一個錯誤並修復它,但仍然行爲新插入爲什麼沒有更新? –

0

很多[R & d i後得到了解決:

use: 
$em->merge($obj_XYZ) instead of $em->persist($obj_XYZ); 

    before 
$em->flush(); 
相關問題