首页 > 解决方案 > Symfony 如何删除集合项

问题描述

当我提交带有已删除元素的集合时,我的元素已正确删除,但我不明白 Symfony 如何删除元素。

当我die();的脚本没有停止到我的卸妆方法中时,我认为 Symfony 没有传递到我的方法中。那么,Symfony 如何在不调用我的 remover 方法的情况下删除我的元素?它是如何工作的?

应用程序上下文:
我从 API 获得了一些数据,我只想从我的 Web 界面添加或删除数据。所以,在我添加/删除数据之后,我只想在 API 上发布新对象并删除相关行。我还可以比较预提交时的原始对象(从 API 获取)和后提交时的新对象,以查看两者之间的差异。但是,如果存在调用对象移除器的方法,我不必使用第二个解决方案,我认为使用个人移除器的第一个解决方案更好。

我的卸妆示例:

public function removeMyElement($myElement)
{
    personnalMethodTreatment($myElement);
    if (!$this->myElement->contains($myElement)) {
        return;
    }
    $this->myElement->removeElement($myElement);
}

谢谢你的帮助 !

解决方案

所以,感谢大家的帮助。我写这些行是为了帮助其他有同样问题的人。

默认情况下,Symfony 称它为自己的移除器。如果您想调用自定义移除器,请将by_reference选项添加false到您的集合表单类型。
by_reference: false
有关by_reference https://symfony.com/doc/current/reference/forms/types/collection.html#by-reference的更多信息

总而言之,默认情况下 Symfony 会按以下顺序调用您的自定义方法:
Setter>Remover

所以,如果你有一个 setter 和一个 remover,Symfony 会更喜欢前者。

为了解决我的问题,我遵循了先前的说明,并将我的具体处理纳入我的二传手。

希望能帮助到人们。

标签: phpsymfonydoctrine-ormsymfony3.x

解决方案


推荐阅读