我正在使用Gedmo原则扩展,如SoftDeletable,在不同的点上,我需要禁用此筛选器,以便用户可以与软删除实体或实体的软删除关系进行交互。
这包括但不限于,一次在控制器中,另一次在SonataAdmin的特定区域中。
到目前为止,我找到的解决方案是在em上调用getFilters()并禁用softdeleteable,这很好。
然而,sonata管理类和控制器似乎都要执行多次,这会导致致命的尝试禁用已经禁用的过滤器,所以我必须这样做:
if (array_key_exists('softdeleteable', $this->em->getFilters()->getEnabledFilters())) {
$this->em->getFilters()->disable('softdeleteable');
}
至少可以说,这本身就很棘手。
但是,还有其他问题,比如命令的作用域。我还没有发现前端有任何问题,但在管理中,多次执行,其中一次是构建导航(我认为)意味着过滤器总是被禁用的,在我看来,只有能够直接在em上这样做,一旦我不想在后端禁用功能,就会导致大量问题。
有更好的方法吗?
在撰写本文时,答案是否定的,现在添加了按实体禁用过滤器的功能,如下所示:
// Enable / Disable filter filter, for specified entity (default is enabled for all)
$filter = $em->getFilters()->enable('soft-deleteable');
$filter->disableForEntity('EntityArticle');
$filter->enableForEntity('EntityArticle');
文件:https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/softdeleteable.md