我正在使用Gedmo Doctrine Extensions,例如 SoftDeletable,并且在不同的时候我需要禁用此过滤器,以便用户可以与软删除实体或实体的软删除关系进行交互。
这包括但不限于一次在控制器中,然后再次在 SonataAdmin 的特定区域中。
到目前为止,我找到的解决方案是在 em 上调用 getFilters() 并禁用 softdeleteable,这很好。
然而,奏鸣曲管理类和控制器似乎都经历了多次执行,这会导致致命的尝试禁用已经禁用的过滤器,所以我必须这样做:
if (array_key_exists('softdeleteable', $this->em->getFilters()->getEnabledFilters())) {
$this->em->getFilters()->disable('softdeleteable');
}
至少可以这么说,这本身似乎很老套。
但是,还有其他问题,例如命令的范围。我还没有发现任何前端问题,但是在管理员中,多次执行,其中之一是构建导航(我认为)意味着过滤器始终处于禁用状态,并且只能直接在 em 上执行此操作在我看来,只要我不希望在后端某处禁用该功能,它就会导致大量问题。
有没有更好的方法来做到这一点?