我剛剛更新到FOSUserBundle的最新版本,該版本不再使用FormHandlers。FOSUserBundle:使用事件監聽器保存相關注冊數據
我的應用程序中的每個用戶都有一個「主頁」,我使用註冊表單在用戶創建其帳戶時捕獲有關主頁的信息。
本來我已經覆蓋了FormHandler使用的onSuccess方法來保存額外的數據:
public function onSuccess(UserInterface $user, $confirmation)
{
$home = $user->getHome();
$this->documentManager->persist($home);
$this->documentManager->flush();
parent::onSuccess($user, $confirmation);
}
這種成功保存的主頁文件和用戶文件的引用。
有了,你現在必須使用事件偵聽器的方法,我已經訂閱的監聽器上FOSUserEvents::REGISTRATION_COMPLETED
並創建了以下方法:
public function onRegistrationCompleted(FilterUserResponseEvent $event)
{
$user = $event->getUser();
$home = $user->getHome();
$this->documentManager->persist($home);
$this->documentManager->flush();
$this->userManager->updateUser($user);
}
這節省了家庭,但不保存在參考用戶。由於我使用的是REGISTRATION_COMPLETED
事件,用戶已經被RegistrationController保存了,而在首頁被保存之前,這可能與它有關係?
但是,我認爲在創建Home之後重新保存用戶就足夠了?
如果我在刷新後var_dump($home)
,那麼它具有正確的id屬性值。
如果在刷新後調用$user->setHome($home)
,則User中的引用仍爲NULL。
自更新以來,我還沒有更改過我的基礎模型,它仍然使用相同的Doctrine Mongo ODM類,所以引用仍然應該保存?