2016-03-05 71 views
3

我是Symfony和FOSUserBundle的新用戶,當用戶想註冊時,他與用戶和流之間有一對一的關係,他檢查他是不是流媒體。如果他是一個流光我想創建關係的新流與用戶所以這裏是從FOSUserBundle的registerAction說我重寫:在註冊時創建一個新的OneToOne關係

$form = $this->container->get('fos_user.registration.form'); 
     $formHandler = $this->container->get('fos_user.registration.form.handler'); 
     $confirmationEnabled = $this->container->getParameter('fos_user.registration.confirmation.enabled'); 
     $process = $formHandler->process($confirmationEnabled); 
     if ($process) { 
      $user = $form->getData(); 

      /*This is what I added*/ 
      if($user->getIsStreamer()){ 
       $em = $this->getDoctrine()->getManager(); 
       $stream = new Stream(); 
       $stream->setUser($user); 
       $em->persist($stream); 
       $em->flush(); 
      } 
      /********/ 
      $authUser = false; 
      if ($confirmationEnabled) { 
       $this->container->get('session')->set('fos_user_send_confirmation_email/email', $user->getEmail()); 
       $route = 'fos_user_registration_check_email'; 
      } else { 
       $authUser = true; 
       $route = 'fos_user_registration_confirmed'; 
      } 

      $this->setFlash('fos_user_success', 'registration.flash.user_created'); 
      $url = $this->container->get('router')->generate($route); 
      $response = new RedirectResponse($url); 

      if ($authUser) { 
       $this->authenticateUser($user, $response); 
      } 

      return $response; 
     } 

但是什麼都沒有發生,我怎麼錯過了嗎?

+0

瞥見您的班級屬性涉及該關係可能會有所幫助。 – Heah

回答

1

您錯過了將流添加到用戶的部分(並且不僅設置流的用戶)。

首先,確保您的關聯包含cascade={"persist"},以避免需要手動持續的流:

/** 
* @ORM\OneToOne(targetEntity="Stream", cascade={"persist"}, 
*/ 
protected $stream; 

然後,改變你的setStream使其調用$stream->setUser自動:

public function setStream(Stream $stream = null) 
{ 
    $this->stream = $stream; 
    $stream->setUser($this); // Setter calling 

    return $this; 
} 

現在你可以用這樣的條件替換你的條件邏輯:

if($user->getIsStreamer()){ 
    $stream = new Stream(); 
    $user->setStream($stream); 
} 

在方法結束時調用$em->flush時應該正確存儲關聯。

在FOSUB註冊的情況下,應該是:
$this->get('fos_user.user_manager')->updateUser($user);
它在confirmAction中完成,您的用戶被重定向成功。