首页 > 解决方案 > 我应该在 Doctrine 中禁用过滤器后启用它还是在下一个请求中自动启用它

问题描述

我正在开发一个 Symfony 项目,并且我正在使用全局过滤器,我需要在一个控制器操作中禁用它。我应该在使用未过滤的结果完成工作后启用它们,还是在下一个请求时自动启用它们?启用过滤器后,我还应该使用clear()EntityManager 的方法吗?

标签: phpsymfonydoctrine-ormdoctrine

解决方案


不,如果您的 Doctrine 过滤器默认启用,您不需要在禁用后启用过滤器。

根据 Doctrine Filter 文档,如果您有如下配置:

doctrine:
    orm:
        filters:
            myFilter:
                class: MyVendor\MyBundle\Filters\MyFilter
                enabled: true
                ...

并且您使用以下方法禁用控制器内部的过滤器:

public function homepageAction(Request $request)
{
    ....
    /** @var EntityManager $em */
    $em = $this->getDoctrine()->getManager();
    $filters = $em->getFilters()
                  ->disable('myFilter');
    ....
}

对于完整的请求,过滤器被禁用。但是,如果您请求另一个控制器,但您没有禁用过滤器,则将应用过滤器。


推荐阅读