有沒有辦法用控制器的KNPLabs DoctrineBehaviors覆蓋softdeletable行爲?Symfony2,KnpLabs DoctrineBehaviors:如何真正刪除一個軟可刪除的實體?
在我的行動,我希望能夠暫時「禁用」的softdeletable行爲,所以我可以真正從數據庫,而不是隻設置deletedAt
字段中刪除我的實體。
有沒有辦法用控制器的KNPLabs DoctrineBehaviors覆蓋softdeletable行爲?Symfony2,KnpLabs DoctrineBehaviors:如何真正刪除一個軟可刪除的實體?
在我的行動,我希望能夠暫時「禁用」的softdeletable行爲,所以我可以真正從數據庫,而不是隻設置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
」,因爲服務是不公開的。
要解決此問題,根據nifr,2個可能的解決方案:
1)定義控制器本身作爲一個服務並注入用戶服務的明確
2)創建一個工廠的服務,將返回訂戶服務和呼叫您的控制器之一
是的,請參閱https://stackoverflow.com/questions/22812675/disable-soft-deleteable-filter-for-hard-delete-record-doesnt-work – spackmat
@spackmat您的鏈接是指不同的包(Gedmo/SoftDeleteable),而我的答案指的是KnpLabs DoctrineBehaviors SoftDeletable。 – Roubi
是的,但這也適用於KnpLabs DoctrineBehaviors SoftDeletable(我在項目中以這種方式實現它)。但是你自己的回答更好,非常神經質。 ;) – spackmat