完全清除表单集合

时间:2015-04-01 12:56:22

标签: symfony symfony-forms formcollection

我遇到Symfony 2.6表单集的问题。从集合中删除元素的工作原理,但仅在存在至少一个元素时才有效。如果从DOM中删除最后一个元素(将集合容器留空),则在处理请求后,不会从集合中删除任何元素。

示例:

我有一个收集“儿童”的表格和两个孩子,“a”和“b”。我从DOM中删除子“b”,保存,removeChild被调用,子项被删除。现在我也删除了孩子“a”,保存,没有任何反应 - 刷新表格之后孩子仍然存在。 在表单处理完请求后转储主实体时,子项也存在于它的集合中。

有没有人有类似的问题并找到了解决方案?

3 个答案:

答案 0 :(得分:2)

感谢@Daniel指出我的新方向,我找到了解决方案。方法提交确实接受第二个参数 - 清空。但是,已弃用了传递提交请求,并将在Symfony 3.0中删除。 处理请求确实实际上支持清空功能。 它不是手动传递的,而是基于请求方法。如果方法是post,则clear empty设置为true。如果method是patch,则clear为false。在我的情况下,方法是补丁,因此问题。

答案 1 :(得分:1)

您可以通过两种方法完成此操作:

但请勿忘记cascade={"remove"}注释

答案 2 :(得分:0)

您可以通过以下方式删除实体集合的所有项目:

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

当这个$ request来自javascript Ajax调用时出现问题:

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

因为null值是作为String" null"收到的。如果collectionName是一个空数组,它将不会在ajax调用中传递。 因此,使用null值并在$ form-> submit():

之前应用预处理
$toPatch = array();

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

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