我遇到Symfony 2.6表单集的问题。从集合中删除元素的工作原理,但仅在存在至少一个元素时才有效。如果从DOM中删除最后一个元素(将集合容器留空),则在处理请求后,不会从集合中删除任何元素。
示例:
我有一个收集“儿童”的表格和两个孩子,“a”和“b”。我从DOM中删除子“b”,保存,removeChild被调用,子项被删除。现在我也删除了孩子“a”,保存,没有任何反应 - 刷新表格之后孩子仍然存在。 在表单处理完请求后转储主实体时,子项也存在于它的集合中。
有没有人有类似的问题并找到了解决方案?
答案 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);