我正在使用SonataAdminBundle --更确切地说是SonataORMAdminBundle和Doctrine --来做我的一些管理工作。到目前为止,这是一个非常有用的捆绑,然而,对实体的感官删除有点棘手。
假设一个旅游实体有一个卡车和一个拖车实体,但是当一个卡车被丢弃时,它不应该再出现在整个管理应用程序中。尽管如此,可能仍然存在与这辆卡车有关的遗留旅游实体。
因此,当用户可能在管理中编辑这样的遗留旅游时,还不清楚如何解决这个问题,实体选择是否消失了?
我看过SoftDelete扩展Bundles,但是它似乎需要大量的工作来调整所有的具体情况。
是否有一种简单的方法在捆绑层次上,还是在一般理论中解决这类问题?
发布于 2013-11-22 10:16:01
当需要时,在Sonata套件中实现此行为的方式是通过实体中的一个新的布尔字段:“已启用”。然后我们在它上添加一个过滤器来显示它或不显示它,并且永远不会实际删除使用中的对象。软删除是一种特定于客户端的操作(您可能有专门的业务规则和它一起),我们没有在Sonata套件中实现它。在这种情况下,您的实现应该取决于您的需要。
但是,我们在EntityAuditBundle中集成了来自Simplethings (https://github.com/simplethings/EntityAudit)的SonataDoctrineORMAdminBundle:每个具有Admin类的实体都会被自动审计。这允许跟踪在已审计实体上完成的每个编辑。(不一定是你想要的东西,但可能还是很有趣)。
最后,正如您所提到的,SoftDelete可能会帮您完成任务。但是您可能更愿意拥有自己的事件侦听器(例如使用preRemove ),并以自己的方式实现解决方案。
如果您认为您的解决方案可能值得在SonataDoctrineORMAdminBundle中集成,可以在github上创建一个问题,我们将讨论它。
https://stackoverflow.com/questions/20057276
复制相似问题