Symfony2,KnpLabs DoctrineBehaviors:如何真正删除可软删除的实体?

Symfony2, KnpLabs DoctrineBehaviors: How do I truly delete a softdeletable entity?

有没有一种方法可以通过控制器 KNPLabs DoctrineBehaviors 覆盖软删除行为?

在我的行动中,我希望能够暂时 "disable" 软删除行为,这样我就可以 真正从数据库中删除我的实体 而不是仅仅设置deletedAt 字段。

nifr 好心地在 Github 上给了我一个答案: https://github.com/KnpLabs/DoctrineBehaviors/issues/294#issuecomment-190310921:

Quick 'n dirty:

$entityManager = $this->getDoctrine()->getManager('default');
$eventManager = $entityManager->getEventManager();

// remove the softdeletable subscriber
$subscriber = $this->get('knp.doctrine_behaviors.softdeletable_subscriber');
$eventManager->removeEventListener($subscriber->getSubscribedEvents(), $subscriber);

// remove entity while the subscriber is removed
$entityManager->remove($entity);
$entityManager->flush();

// add back the subscriber
$eventManager->addEventSubscriber($subscriber);

问题 这会触发错误“you have requested a non-existent service”,因为该服务不是 public.

要解决此问题,根据 nifr,有 2 种可能的解决方案:

1) 将您的控制器本身定义为服务并显式注入订户服务
2) 创建一个工厂服务,它将 return 订户服务并在您的控制器中调用该服务