2015-04-01 30 views
1

我有一個Symfony 2.6表單集合的問題。只有在至少有一個存在的情況下,才能從收集作品中刪除元素。如果從DOM中刪除最後一個元素(將集合容器留空),則在處理請求之後,不會從集合中刪除元素。完全清除表單集合

例子:

我有收集 「孩子」 和兩個孩子, 「A」 和 「B」 的形式。我從DOM中刪除孩子「b」,保存,removeChild被調用,孩子被刪除。現在我還清除孩子「a」,保存,沒有任何反應 - 刷新表格後,孩子仍然存在。 在表單處理完請求後轉儲主實體時,該子對象也存在於它的集合中。

有沒有人有類似的問題,並找到了解決方案?

+0

可能是我們展示你的代碼? – xurshid29 2015-04-01 18:02:05

回答

1

感謝@丹尼爾指出我在一個新的方向,我找到了一個解決方案。提交方法實際上接受第二個參數 - 清空。但是,傳遞請求提交將被棄用,並將在Symfony 3.0中刪除。 處理請求確實實際上支持清空功能。 它根本不是手動傳遞,而是基於請求方法。如果該方法是post,則clear empty設置爲true。如果方法是補丁,清空是錯誤的。在我的情況下,該方法是補丁,因此這個問題。

+0

我有類似的問題。您是否找到PATCH方法的解決方案? – 2016-08-25 07:16:10

+0

我找到了一個解決方案 – 2016-08-25 08:33:53

1

您可以通過2種方法做到這一點:

但不要忘了cascade={"remove"}註釋

+0

謝謝你的支持。然而,問題是你不能清空集合**完全** - 所有東西都像文檔一樣工作,但是如果你刪除了dom中的所有**元素,那麼表單將不會被調用,而且沒有集合,removeElement也不會被調用。所以oprhan刪除或級聯刪除都不會起作用,因爲收集本身沒有被修改。 – Looted 2015-04-01 16:10:23

+1

@Looted,我想知道是否可以使用「$ form-> submit($ request,false)」,如果缺少它,*將不會清除該字段。您需要確保「$ clearMissing」設置爲true。 – Daniel 2015-04-02 01:02:58

+0

@丹尼爾,謝謝你的提示。然而,我使用handleRequest,因爲傳遞請求提交已根據文檔棄用。它不接受除請求外的任何參數。 – Looted 2015-04-02 08:20:29

0

你可以簡單地通過刪除實體的集合中的所有項目:

var item = {field: 'test', collectionName: null}; 
ajaxPatchRequest(item); 

,因爲空值:當此$請求來自JavaScript的Ajax調用出現

$request['collectionName'] = null; //or empty array 
$form->submit($request, false); 

問題被接收爲字符串「null」。如果collectionName是一個空數組,它將不會在ajax調用中傳遞。 因此,使用空值和前$形式 - 應用預處理>提交():

$toPatch = array(); 

foreach($request->request->all() as $key => $value) { 
    if($value === 'null') { 
     $toPatch[$key] = null; 
    } else { 
     $toPatch[$key] = $value; 
    } 
} 

$form->submit($toPatch, false);