2015-07-13 37 views
4

我只是想讓用戶註冊。他沒有收到任何電子郵件。當然我可以這樣做:Symfony2 FOSUserBundle在註冊時同時禁用了郵件確認和用戶

registration: 
    confirmation: 
     enabled: false 

但是,這使得用戶自動註冊沒有確認。

我想這樣做,當用戶註冊時,他必須等待,直到管理員啓用用戶。這意味着我需要使用戶在默認情況下被禁用..

我無法找到任何有關信息。有人可以幫忙嗎?

我試過,但它沒有工作:

user.php的

public function __construct() 
{ 
    parent::__construct(); 
    // your own logic 

     $this->enabled = false; 
    //and 
     $this->setEnabled(false); 
    } 

PS加上FOS我使用的SonataUserBundle ..這是我的registerAction:

public function registerAction() 
    { 
     $user = $this->container->get('security.context')->getToken()->getUser(); 
     if ($user instanceof UserInterface) { 
      $this->container->get('session')->getFlashBag()->set('sonata_user_error', 'sonata_user_already_authenticated'); 
      $url = $this->container->get('router')->generate('sonata_user_profile_show'); 
      return new RedirectResponse($url); 
     } 
     $form = $this->container->get('sonata.user.registration.form'); 
     $formHandler = $this->container->get('sonata.user.registration.form.handler'); 
     $confirmationEnabled = $this->container->getParameter('fos_user.registration.confirmation.enabled'); 

     $process = $formHandler->process($confirmationEnabled); 
     if ($process) { 
      $user = $form->getData(); 

      $authUser = false; 
      if ($confirmationEnabled) { 
       $this->container->get('session')->set('fos_user_send_confirmation_email/email', $user->getEmail()); 
       $url = $this->container->get('router')->generate('fos_user_registration_check_email'); 
      } else { 
       $authUser = true; 
       $route = $this->container->get('session')->get('sonata_basket_delivery_redirect'); 

       if (null !== $route) { 
        $this->container->get('session')->remove('sonata_basket_delivery_redirect'); 
        $url = $this->container->get('router')->generate($route); 
       } else { 
        $url = $this->container->get('session')->get('sonata_user_redirect_url'); 
       } 
      } 

      $this->setFlash('fos_user_success', 'registration.flash.user_created'); 

      $response = new RedirectResponse($url); 

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

      return $response; 
     } 

     $this->container->get('session')->set('sonata_user_redirect_url', $this->container->get('request')->headers->get('referer')); 

     return $this->container->get('templating')->renderResponse('MpShopBundle:Frontend:registration.html.'.$this->getEngine(), array(
      'form' => $form->createView(), 
     )); 
    } 

UPDATE

I ca ñ使這項工作是通過啓用電子郵件確認,但不發送電子郵件給用戶。這樣用戶不能確認他的賬戶,並且必須等待管理員啓用它。但我不想有這樣的問題..應該有辦法通常禁用它們。

FIXED

我終於想通了。你所要做的只是在代碼中的registerAction中檢查是否需要電子郵件確認,在else語句中將其設置爲啓用並更新用戶。如果你不更新它不會工作。

if ($process) { 
      $user = $form->getData(); 

      $authUser = false; 
      if ($confirmationEnabled) { 
       $this->container->get('session')->set('fos_user_send_confirmation_email/email', $user->getEmail()); 
       $url = $this->container->get('router')->generate('fos_user_registration_check_email'); 
      } else { 
       $user->setEnabled(false); 
       $userManager = $this->container->get('fos_user.user_manager'); 
       $userManager->updateUser($user); 
       $route = $this->container->get('session')->get('sonata_basket_delivery_redirect'); 

       if (null !== $route) { 
        $this->container->get('session')->remove('sonata_basket_delivery_redirect'); 
        $url = $this->container->get('router')->generate($route); 
       } else { 
        $url = $this->container->get('session')->get('sonata_user_redirect_url'); 
       } 
      } 

回答

1

$this->setEnabled = true;大概應該是$this->setEnabled(true);

在任何情況下,我不認爲這會工作,因爲用戶在\FOS\UserBundle\Controller\RegistrationController啓用上線43114顯式:

$user->setEnabled(true); 

因此我預計,沒有配置設置,這一點,因此您必須用您自己的邏輯覆蓋RegistrationController以將用戶設置爲禁用。

這是非常簡單的,這裏的相關文件:

還有關於使用事件掛鉤到控制器的文檔中的一些信息,這可能是一個可行的替代辦法:

希望這有助於:)

+0

嘿謝謝你的回覆。不幸的是我已經試過了。我忘了提及我也在使用SonataUserBundle。我已經使用registrationAction更新了我的答案。看看它。 – Dominykas55

+0

啊......好吧,我從來沒有使用過'SonataUserBundle',所以我不確定在這種情況下問題是什麼。對於那個很抱歉。 –

2

您可以嘗試在用戶使用實體然後@ORM\HasLifecycleCallbacks()定義的方法,如:

/** 
* @ORM\PrePersist 
*/ 
public function yourMethod(){ 
    $this->setEnabled(false); 
} 

這對我的作品。

相關問題