如何在具有动态子域的树枝中生成正确的路由?

How to generate right route in twig with dynamic sub-domain?

我有一个基于子域的多租户应用程序可以正常工作,但我在 Twig 模板中生成 link 时遇到问题。

所有生成的 link 都在默认子域上,而不是当前子域

routes.yaml

app_customer:  
  resource: '../src/Controller/Customer/'  
  host: "{subdomain}.domain.com"  
  defaults:  
    subdomain: tenant1  
  requirements:  
    subdomain: tenant1|tenant2  

SecurityController.php

class SecurityController extends AbstractController
{
    /**
     * @Route("/login", name="app_login", methods={"GET","POST"})
     */
    public function login(AuthenticationUtils $authenticationUtils)
    {
        // get the login error if there is one
        $error = $authenticationUtils->getLastAuthenticationError();
        // last username entered by the user
        $lastUsername = $authenticationUtils->getLastUsername();

        return $this->render('security/login.html.twig', [
            'last_username' => $lastUsername,
            'error'         => $error,
        ]);
    }
}

login.html.twig

<form action="{{ path('app_login') }}" method="post">...</form>

将始终生成 https://tenant1.domain.com/login 但是当前的 url 是 tenant2.domain.com

我相信它总是生成 https://tenant1.domain.com/login,因为您将 "tenant1" 设置为 subdomain 的默认值,并且在调用 [=14= 时没有传递不同的值]

试试这个:

{% set currsubdomain = app.request.getHttpHost()|split('.')|first %}

<form action="{{ path('app_login', {subdomain: currsubdomain }) }}" method="post">...</form>

或者只是传递整个主机:

<form action="{{ path('app_login', {host: app.request.getHttpHost}) }}" method="post">...</form>