我刚刚更新到最新版本的 FOSUserBundle,它取消了 FormHandlers。
我的应用程序中的每个用户都有一个“主页”,当用户创建他们的帐户时,我正在使用注册表单来捕获有关主页的信息。
最初我使用 onSuccess 方法重写了 FormHandler 以保存额外的数据:
public function onSuccess(UserInterface $user, $confirmation)
{
$home = $user->getHome();
$this->documentManager->persist($home);
$this->documentManager->flush();
parent::onSuccess($user, $confirmation);
}
这成功地保存了 Home 文档及其在 User 文档中的引用。
使用您现在必须使用的事件侦听器方法,我订阅了一个侦听器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);
}
这会保存 Home,但不会保存 User 中的引用。当我使用该REGISTRATION_COMPLETED
事件时,用户已经被 RegistrationController 保存,而在 Home 之前首先保存,所以这可能与它有关吗?
但是,我认为在创建主页后重新保存用户就足够了?
如果我var_dump($home)
在刷新之后,那么它的 id 属性值是正确的。
如果我$user->setHome($home)
在刷新后调用,用户中的引用仍然是 NULL。
自更新以来我没有改变我的基础模型,它仍然使用相同的 Doctrine Mongo ODM 类,所以引用应该仍然保存?