【问题标题】:symfony form - delete embedded form objectsymfony 表单 - 删除嵌入的表单对象
【发布时间】:2010-08-18 05:10:39
【问题描述】:

我有两个 Symfony 表单:

ShoppingListForm
ShoppingListItemForm

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

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

item_id (checkbox) 
shopping_list_id (hidden - foreign key)

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

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

【问题讨论】:

    标签: forms symfony1 embedded-object


    【解决方案1】:

    我会通过重写 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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多