FormHandlers を廃止する最新バージョンの FOSUserBundle に更新しました。
アプリの各ユーザーには「ホーム」があり、ユーザーがアカウントを作成するときに登録フォームを使用してホームに関する情報を取得しています。
もともと、onSuccess メソッドを使用して余分なデータを保存するために FormHandler をオーバーライドしていました。
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によって保存されているので、何か関係があるのでしょうか?
ただし、ホームが作成された後にユーザーを再保存するだけで十分だと思いましたか?
var_dump($home)
フラッシュ後にIを実行すると、id プロパティの正しい値が得られます。
フラッシュ後に呼び出すと$user->setHome($home)
、User の参照は NULL のままです。
更新以降、基礎となるモデルを変更していません。同じ Doctrine Mongo ODM クラスを使用しているため、参照は保存されますか?