FormHandlers를 사용하지 않는 FOSUserBundle의 최신 버전으로 방금 업데이트했습니다.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에 의해 이미 저장되었지만 홈이 먼저 저장되기 전에 그와 관련이있을 수 있습니다.
그러나 가정을 만든 후에 사용자를 다시 저장한다고 가정했는데 충분합니까?
플러시 후 I var_dump($home)
인 경우 id 속성에 올바른 값을 갖습니다.
플러시 후 $user->setHome($home)
을 호출하면 User의 참조가 여전히 NULL입니다.
업데이트 이후 내 기본 모델을 변경하지 않았지만 여전히 동일한 Doctrine Mongo ODM 클래스를 사용하므로 참조가 저장되어야합니다.