我刚刚更新到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类,所以引用仍然应该保存?