有没有办法用控制器覆盖KNPLabs DoctrineBehaviors的softdeletable行为?
在我的操作中,我希望能够暂时“禁用”softdeletable行为,以便真正从数据库中删除我的实体,而不是仅设置deletedAt
字段。
答案 0 :(得分:2)
nifr在Github上给了我一个答案: https://github.com/KnpLabs/DoctrineBehaviors/issues/294#issuecomment-190310921:
快点肮脏:
$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
”,因为该服务不公开。
根据nifr的说法,要解决这个问题,有两种可能的解决方案:
1)将您的控制器本身定义为服务并明确注入订户服务 2)创建一个工厂服务,该服务将返回订户服务并在您的控制器中调用该服务