Php 在向FOSUserBundle注册后,如何重定向到动态自定义路由

Php 在向FOSUserBundle注册后,如何重定向到动态自定义路由,php,symfony,fosuserbundle,Php,Symfony,Fosuserbundle,我已经找了一段时间了,但是找不到答案 预期行为: 用户进入产品页面 用户想要购买产品,因此需要登录/注册(使用模式) 用户没有帐户,所以他注册了 注册后(没有电子邮件确认),用户将登录并重定向到当前产品页面 用户可以继续结帐等 此行为在登录情况下有效,使用表单中的\u target\u path参数 但是,此参数不适用于注册。这有点烦人,我在哪里错过了什么?我正在考虑在注册成功事件上实现一个侦听器,但它看起来真的很奇怪,不像登录表单那么简单 编辑:找到了我的解决方案,请参见下面我自己的答案回

我已经找了一段时间了,但是找不到答案

预期行为:
  • 用户进入产品页面
  • 用户想要购买产品,因此需要登录/注册(使用模式)
  • 用户没有帐户,所以他注册了
  • 注册后(没有电子邮件确认),用户将登录并重定向到当前产品页面
  • 用户可以继续结帐等
此行为在登录情况下有效,使用表单中的
\u target\u path
参数

但是,此参数不适用于注册。这有点烦人,我在哪里错过了什么?我正在考虑在注册成功事件上实现一个侦听器,但它看起来真的很奇怪,不像登录表单那么简单


编辑:找到了我的解决方案,请参见下面我自己的答案回答那些疑惑的人

TL;DR:注册过程不遵循登录的步骤 感谢@yceruto的评论

我在
注册成功
事件中做了一个快速的听众:

/**
 * @param FormEvent $event
 */
public function redirectOnRegistration(FormEvent $event)
{
    $route = $event->getRequest()->headers->get('referer', $this->router->generate('homepage'));
    $response = new RedirectResponse($route);
    $event->setResponse($response);
}

(如果没有referer,我将在主页上重定向)。

在安全设置中,您必须打开referer:

firewalls:
    dev:
        pattern: ^/(_(profiler|wdt|console)|css|images|js)/
        security: false

    main:
        pattern: ^/any_pattern
        anonymous: ~
        form_login:
            login_path: any_pattern_login
            check_path: any_pattern_login
            use_referer: true
        logout: true
        access_denied_handler: app.security.access_denied_handler
        guard:
            authenticators:
                - app.api_authenticator
            provider: api_provider
        logout:
            path: any_pattern_logout
            invalidate_session: true

这应该可以在
FOSUserEvents::REGISTRATION\u SUCCESS
上实现侦听器,并将响应更改为重定向到所需页面。登录表单使用框架会话功能保存当前路径,并在登录后自动重定向。注册控制器已退出此默认行为。好的,谢谢,我将发布我的侦听器,以供其他人了解。很高兴结束我的研究:)那是登录表单,不是注册表。啊,好的。看看这个: