2014-06-19 117 views
2

我想知道什麼是最好的方法來重定向已登錄的用戶,如果他們嘗試訪問註冊頁面。FOSUserBundle:註冊重定向如果登錄

我寧願一種方法,不要求我重寫註冊控制器只是爲了實現登錄檢查&重定向。

我看着註冊初始化事件,但我不知道如何啓動重定向,因爲似乎沒有辦法通過UserEvent類設置事件響應。

感謝

+0

重寫控制器是最簡單的方式。實現某種傾聽者可能會更困難,更復雜。 – phpisuber01

+0

我個人發現使用事件監聽器更整潔(和更簡單)。 –

回答

3

我使用類似下面..

namespace Acme\UserBundle\EventSubscriber; 

use FOS\UserBundle\Event\GetResponseUserEvent; 
use FOS\UserBundle\FOSUserEvents; 
use Symfony\Component\EventDispatcher\EventSubscriberInterface; 
use Symfony\Component\HttpFoundation\RedirectResponse; 
use Symfony\Component\Routing\Generator\UrlGeneratorInterface; 
use Symfony\Component\Security\Core\SecurityContextInterface; 

class FOSUserSubscriber implements EventSubscriberInterface 
{ 
    protected $router; 

    protected $securityContext; 

    public function __construct(
     UrlGeneratorInterface $router, 
     SecurityContextInterface $securityContext 
    ) 
    { 
     $this->router = $router; 
     $this->securityContext = $securityContext; 
    } 

    public static function getSubscribedEvents() 
    { 
     return array(
      FOSUserEvents::REGISTRATION_INITIALIZE => 'forwardToRouteIfUser', 
     ); 
    } 

    public function forwardToRouteIfUser(GetResponseUserEvent $event) 
    { 
     if (!$this->securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED')) { 
      return; 
     } 

     $url = $this->router->generate('acme_the_route_to_redirect_to'); 

     $response = new RedirectResponse($url); 

     $event->setResponse($response); 
    } 
} 

隨着

parameters: 
    acme_user.subscriber.fos_user.class: 
      Acme\UserBundle\EventSubscriber\FOSUserSubscriber 

services: 
    acme_user.subscriber.fos_user: 
     class: %acme_user.subscriber.fos_user.class% 
     arguments: 
      - @router 
      - @security.context 
     tags: 
      - { name: kernel.event_subscriber 
+0

我沒有意識到可以使用GetResponseUserEvent!謝謝。 –

相關問題