Symfony FOSUserBundle:如果登录,则注册重定向

Symfony FOSUserBundle:如果登录,则注册重定向,symfony,fosuserbundle,Symfony,Fosuserbundle,我想知道如果用户尝试访问注册页面,那么重定向已经登录的用户的最佳方法是什么 我更喜欢一种方法,它不需要我仅仅为了实现登录检查和重定向而重写注册控制器 我查看了注册初始化事件,但我不知道如何启动重定向,因为似乎没有通过UserEvent类设置事件响应的方法 谢谢我用了下面这样的东西 namespace Acme\UserBundle\EventSubscriber; use FOS\UserBundle\Event\GetResponseUserEvent; use FOS\UserBundle

我想知道如果用户尝试访问注册页面,那么重定向已经登录的用户的最佳方法是什么

我更喜欢一种方法,它不需要我仅仅为了实现登录检查和重定向而重写注册控制器

我查看了注册初始化事件,但我不知道如何启动重定向,因为似乎没有通过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);
    }
} 


我用了如下的东西

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);
    }
} 


重写控制器将是最简单的方法。实现某种类型的监听器可能会更加困难和复杂。我个人认为使用事件监听器更整洁和简单。重写控制器将是最简单的方法。实现某种类型的监听器可能会更加困难和复杂。我个人认为使用事件监听器更加简洁和简单。我没有意识到可以使用GetResponseUserEvent!谢谢。我不知道GetResponseUserEvent可以使用!非常感谢。