是否有更智能的方法来禁用Symfony2.1中的Doctrine2过滤器?

Ste*_*eve 7 symfony-forms symfony doctrine-orm symfony-2.1

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

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

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

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

    if (array_key_exists('softdeleteable', $this->em->getFilters()->getEnabledFilters())) {
        $this->em->getFilters()->disable('softdeleteable');
    }
Run Code Online (Sandbox Code Playgroud)

至少可以说这看起来很糟糕.

但是,还有其他问题,例如命令的范围.我还没有发现任何前端问题,但在管理员中,多次执行,其中一个是构建导航(我认为)意味着过滤器始终被禁用,并且只能直接在em上执行此操作在我看来,只要我不想在后端某处禁用该功能,它就会导致一大堆问题.

有没有更好的方法呢?

Ste*_*eve 4

虽然在撰写本文时,答案是否定的,但现在已添加了按实体禁用过滤器的功能,如下所示:

// Enable / Disable filter filter, for specified entity (default is enabled for all)
$filter = $em->getFilters()->enable('soft-deleteable');
$filter->disableForEntity('Entity\Article');
$filter->enableForEntity('Entity\Article');
Run Code Online (Sandbox Code Playgroud)

文档:https ://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/softdeleteable.md