有没有更聪明的方法来禁用Symfony2.1中的Doctrine2过滤器?

我正在使用Gedmo Doctrine Extensions,例如SoftDeletable,并且我需要禁用此过滤器以便用户可以与软删除的实体进行交互,或者与实体的软删除关系进行交互。

这包括但不限于一次在控制器中,并且再次在SonataAdmin的特定区域中。

到目前为止,我发现的解决方案是调用em上的getFilters()并禁用softdeleteable,这很好。

然而,两个奏鸣曲管理员类和控制器似乎都经历了多次执行,这导致致命的尝试禁用已禁用的过滤器,所以我必须这样做:

    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

链接地址: http://www.djcxy.com/p/11159.html

上一篇: Is there a smarter way to disable Doctrine2 filters in Symfony2.1?

下一篇: python3 super doesn't work with PyQt classes