2
我想知道什麼是最好的方法來重定向已登錄的用戶,如果他們嘗試訪問註冊頁面。FOSUserBundle:註冊重定向如果登錄
我寧願一種方法,不要求我重寫註冊控制器只是爲了實現登錄檢查&重定向。
我看着註冊初始化事件,但我不知道如何啓動重定向,因爲似乎沒有辦法通過UserEvent類設置事件響應。
感謝
我想知道什麼是最好的方法來重定向已登錄的用戶,如果他們嘗試訪問註冊頁面。FOSUserBundle:註冊重定向如果登錄
我寧願一種方法,不要求我重寫註冊控制器只是爲了實現登錄檢查&重定向。
我看着註冊初始化事件,但我不知道如何啓動重定向,因爲似乎沒有辦法通過UserEvent類設置事件響應。
感謝
我使用類似下面..
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
我沒有意識到可以使用GetResponseUserEvent!謝謝。 –
重寫控制器是最簡單的方式。實現某種傾聽者可能會更困難,更復雜。 – phpisuber01
我個人發現使用事件監聽器更整潔(和更簡單)。 –