我已经为我的商店实体设置了软删除,方法是使用 软删除
这是我的过滤器设置在 doctrine.yml
filters:
softdeleteable:
class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
enabled: true
所以,当我打上例如:网址 /stores
所有的活动商店都会通过,但是如果我改变了 enabled: false
改为false,它会给我所有的结果,包括删除的项目。
现在,我想归档的是通过一个来自前端的查询参数,如 /stores?deleted=1
然后我想得到所有的数据,如果没有。deleted=1
只找到活动项目
为什么不创建一个事件监听器,其中包含 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');
}
}