2016-03-16 46 views
0

的Symfony2後提交值早安改變

我選擇了行從數據庫中我的數據庫進行編輯

$object_before_edit=$this->getDoctrine()->getManager()->getRepository('MyBundle:MyClass')->find($object_id); 

$form = $this->createForm(new MyClassType(), $object_before_edit); 

$form->handleRequest($request); 
    if ($form->isValid()) { 

     // I modified this 2 fields in form 
     dump($form['fielda']->getData()) . "<br/>";// line 1 
     dump($form['fieldb']->getData()). "<br/>";// line 2 

     // but here i want to see the object in the database before doing 
     // persist and flush 

     dump($object_before_edit->getFielda()) . "<br/>";// line 3 
     dump($object_before_edit->getFieldb());// line 4 
     die(); 

} 

FIELDA = 1

fieldb = 2

我改變它的形式:

FIELDA = 3

fieldb = 4

所以在轉儲我看到:

線1:3 //其邏輯

線2:4 //其邏輯

line 3:3 //爲什麼?

line 4:4 // why?

正常的代碼顯示不在形式

回答

0

在DB值當你寫這行:

$form = $this->createForm(new MyClassType(), $object_before_edit); 

你的形式結合到一個參考對象第二個參數。 Symfony表單定義了表單和底層對象之間的映射關係,在處理表單時訪問和修改它($form->handleRequest($request);)。

如果你想保持原有的價值觀,你可能想複製原始對象:

$object = $this->getDoctrine()->getManager()->getRepository('MyBundle:MyClass')->find($object_id); 
$originalObject = clone $object; 
$form = $this->createForm(new MyClassType(), $object); 

$form->handleRequest($request); 
if ($form->isValid()) { 
    dump($form['fielda']->getData()) . "<br/>";// 3 
    dump($form['fieldb']->getData()). "<br/>";// 4 

    dump($originalObject->getFielda()) . "<br/>";// 1 
    dump($originalObject->getFieldb());// 2 
    die(); 
} 

做這樣的事情時要小心。確保EntityManager不會持續克隆的對象。

+0

是的,就是這樣..非常感謝你:) –