2017-08-02 15 views
1

この問題については、多くの質問がありますが、正直言って誰も私のために働いていません(私はSymfony 3.3とFOSUserBundle 2.xを使用しています)。登録後にユーザーを無効にして、管理者に確認させてください

私はachiveする必要があります:

  • ユーザーが正常に自分のアカウントがデフォルトに自動的に設定されて
  • 私のページに登録する(何もメールは送信されません)
  • 管理者がアクティブにすることができます/彼からそのアカウントを有効にします管理パネル

私はイベントリスナーを作成しているが、それは..私もenabledステータスを変更するユーザーオブジェクトを操作することはできません動作しません...

#config.yml 
fos_user: 
    db_driver: orm # other valid values are 'mongodb' and 'couchdb' 
    firewall_name: main 
    user_class: AppBundle\Entity\User 
    from_email: 
     address: "%mailer_user%" 
     sender_name: "%mailer_user%" 
    registration: 
     form: 
      type: AppBundle\Form\RegistrationType 

とイベントリスナー:

class RegistrationListener implements EventSubscriberInterface 
{ 
    /** 
    * @var RouterInterface 
    */ 
    private $router; 

    private $em; 

    public function __construct(RouterInterface $route, UserManagerInterface $em) 
    { 
     $this->router = $route; 
     $this->em = $em; 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    public static function getSubscribedEvents() 
    { 
     return array(
      FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess', 
      FOSUserEvents::REGISTRATION_CONFIRMED=> ['onRegistrationConfirmed', 999], 
      FOSUserEvents::REGISTRATION_FAILURE => 'onRegistrationFailure' 
     ); 
    } 

    public function onRegistrationSuccess(FormEvent $event) 
    { 
     $url = $this->router->generate('app.registration.succes'); 
     $response = new JsonResponse(['redirectUrl' => $url]); 
     $event->setResponse($response); 
    } 

    public function onRegistrationFailure(FormEvent $event) 
    { 
     $array = array('success' => false, 'message' => (string)$event->getForm()->getErrors(true, true)); 
     $response = new JsonResponse($array, Response::HTTP_BAD_REQUEST); 
     $event->setResponse($response); 
    } 

    public function onRegistrationConfirmed(FilterUserResponseEvent $event) 
    { 
     /** 
     * this one is no working.. after registration account is enabled anyway... 
     */ 
     $user = $event->getUser(); 
     $user->setEnabled(false); 
     $user->setSalt('test'); 
     $this->em->updateUser($user); 
    } 
} 

答えて

2

はそれを手に入れました!

に電話をかけるのはFOSUserEvents::REGISTRATION_CONFIRMEDが自分のメールでユーザーに送信されたアクティベーションリンク(ユーザーに送信していない)をクリックした場合にのみ発生するからです。

class RegistrationListener implements EventSubscriberInterface 
{ 
    /** 
    * @var RouterInterface 
    */ 
    private $router; 

    private $em; 

    public function __construct(RouterInterface $route, UserManagerInterface $em) 
    { 
     $this->router = $route; 
     $this->em = $em; 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    public static function getSubscribedEvents() 
    { 
     return array(
      FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess', 
      FOSUserEvents::REGISTRATION_FAILURE => 'onRegistrationFailure' 
     ); 
    } 

    public function onRegistrationSuccess(FormEvent $event) 
    { 
     $user = $event->getForm()->getData(); 
     $user->setEnabled(false); 
     $this->em->updateUser($user); 

     $url = $this->router->generate('app.registration.succes'); 
     $response = new JsonResponse(['redirectUrl' => $url]); 
     $event->setResponse($response); 
    } 

    public function onRegistrationFailure(FormEvent $event) 
    { 
     $array = array('success' => false, 'message' => (string)$event->getForm()->getErrors(true, true)); 
     $response = new JsonResponse($array, Response::HTTP_BAD_REQUEST); 
     $event->setResponse($response); 
    } 
} 
関連する問題