2

我有两种 Symfony 形式:

ShoppingListForm
ShoppingListItemForm

我多次将 ShoppingListItemForm 嵌入到 ShoppingListForm 中。即购物清单包含许多项目。

所以 ShoppingListItemForm 由两个小部件组成:

item_id (checkbox) 
shopping_list_id (hidden - foreign key)

如果对象存在并且复选框未选中,我想要做的是删除相应的 ShoppingListItem 对象。

我不确定这个删除是如何发生的?我会使用帖子验证器来查看哪些字段已经/尚未检查吗?我对这个有点迷茫。

4

2 回答 2

4

我会通过覆盖 ShoppingListForm 的 updateObject 方法并将您的自定义 delete() 等调用放在那里(确保在其中调用 parent::updateObject())来做到这一点。

根据您实现它的方式,您可能还需要删除嵌入的表单及其值,以确保保存对于其余对象仍然正常工作。尝试不使用,但如果这样做,则需要清除以下内容:

unset($taintedValues['ShoppingListItem'][$key]);
unset($this->embeddedForms['ShoppingListItem'][$key]);
unset($this->validatorSchema['ShoppingListItem'][$key]);
unset($taintedFiles['ShoppingListItem'][$key]);

如果您想查看自定义 updateObject 方法以了解如何与值交互等:

http://www.symfony-project.org/forms/1_2/en/11-Doctrine-Integration#chapter_11_sub_customizing_the_updateobject_method

于 2010-08-18T09:11:39.177 回答
0

就个人而言,我会遍历现有的列表项,以查看是否在操作中选中了相应的复选框,并在未选中delete()的项上调用该方法。我不认为这是后验证器的目的,我会直接在操作中执行此操作。

于 2010-08-18T08:32:21.477 回答