api-platform过滤掉软删除项目

问题描述 投票:0回答:1

我已经为我的商店实体设置了软删除,方法是使用 软删除

这是我的过滤器设置在 doctrine.yml

filters:
        softdeleteable:
            class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
            enabled: true

所以,当我打上例如:网址 /stores 所有的活动商店都会通过,但是如果我改变了 enabled: false 改为false,它会给我所有的结果,包括删除的项目。

现在,我想归档的是通过一个来自前端的查询参数,如 /stores?deleted=1 然后我想得到所有的数据,如果没有。deleted=1 只找到活动项目

php symfony api-platform.com
1个回答
4
投票

为什么不创建一个事件监听器,其中包含 Request 对象和Doctrine的事件管理器,并启用禁用该过滤器?就像这样

class FilterListener implements EventSubscriberInterface
{
    private $entityManager;

    public function __construct(EntityManagerInterface $entityManager) {
        $this->entityManager = $entityManager;
    }

    public static function getSubscribedEvents(): array
    {
        return [
            RequestEvent::class => 'onKernelRequest',
        ];
    }

    public function onKernelRequest(RequestEvent $event)
    {
        $request = $event->getRequest();
        if($request->get('deleted', 0) === 0) {
            return;
        }
        $this->entityManager->getFilters()->disable('soft-deleteable');
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.