重定向到登录页面并在 Symfony 2.8 中保留 URL GET 参数

Redirecting to login page and keeping URL GET parameters in Symfony 2.8

我正在创建一个 URL 以像这样的电子邮件发送:

    $url = $this->getContainerInterface()->get('router')->generate(
    'crmpiccobundle_view_subdomain_modify', [
       'subdomain' => $site->getSubdomain(),
       'subdomain_username' => $site->getSubdomain(),
    ], UrlGeneratorInterface::ABSOLUTE_URL),

URL 在我的控制器中由以下方法处理:

/**
 * @Route(
 *     "/view/{subdomain}/modify",
 *     name="crmpiccobundle_view_subdomain_modify"
 * )
 *
 * @Security("is_granted('IS_AUTHENTICATED_FULLY')")
 * @Template("CRMPiccoBundle:Admin/View/Modify:index.html.twig")
 *
 * @param Request $request
 * @param string  $subdomain
 *
 * @return array
 */
public function subdomainModifyViewAction(Request $request, string $subdomain)
{

因此,路由 /view/{subdomain}/modify 需要身份验证,这意味着如果用户未登录,他们将被踢到登录屏幕。我想要实现的是将 'subdomain' 或 'subdomain_username' (我意识到这里有重复)传递到 URL 中的登录页面(例如 /login?subdomain_username=crmpicco ) 或其他方式。

我认为设置会话变量不合适,因为脚本 运行 由 cron 而不是浏览器中的用户。

我可以从 /view/crmpicco/modify?subdomain_username=crmpicco 升到 /login?subdomain_username=crmpicco 吗?

security.yml:

access_control:
    - {path: /, roles: IS_AUTHENTICATED_ANONYMOUSLY}
    - {path: /admin, roles: ROLE_USER}
    - {path: /admin/view, roles: ROLE_USER}

我最终实现它的方法是从会话 (_security.default.target_path) 中提取目标 URL,成功登录后将重定向到该目标,然后解析它以提取URL 参数输出 (?username=crmpicco).

// pull the target URL out of the session and parse it to get the ?username=crmpicco part     

parse_str(parse_url($request->getSession()->get('_security.default.target_path'), PHP_URL_QUERY), $usernameArray);

$prefilledUsername = isset($usernameArray['username']) ? $usernameArray['username'] : '';

// ... then pass through $prefilledUsername to my Login view