7

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

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

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

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

    if (array_key_exists('softdeleteable', $this->em->getFilters()->getEnabledFilters())) {
        $this->em->getFilters()->disable('softdeleteable');
    }

至少可以这么说,这本身似乎很老套。

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

有没有更好的方法来做到这一点?

4

1 回答 1

3

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

// 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');

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

于 2012-12-11T22:06:11.043 回答