Symfony一个应用程序多子域

时间:2018-04-24 14:37:02

标签: symfony routes

我已将所有流量重新路由到我的主域名,请说www.example.com,我的第一页是www.example.com/login,因此子域中的所有条目都将重定向到主域,因此something.example.com/login将结束与www.example.com/login在同一页面上(但子域名将保留在网址中)。我这样做的原因是我有多个'客户'和'用户'每个用户负责一个或多个客户端,并且它全部设置在数据库中并且工作正常,因此我可以使用user1登录我将看到user1的一些任务在client1上,当我使用user2登录时,我将在client2等上看到来自user2的任务......

现在我需要再做一件事让它看起来好一点,当有人打开example.com并使用user1凭据登录时,我希望他被重定向到client1.example.com,同时当有人打开时client1.example.com我希望他看到该客户的徽标。

处理了所有数据库查询和其他登录问题,但我遇到了几个问题:

  • 如何重定向到正确的客户端(子域名)?
  • 反之亦然,如果负责管理客户端和用户的(超级管理员)用户登录如何将其重定向到主域(example.com)而没有?

还有一个问题,但我认为当我能解决其他问题时,它将解决当用户管理多个客户端时,我想让他能够切换客户端,例如user1有一个菜单切换到client1或者client2,但我做的任何重定向都是将用户注销。如何使用此功能维护会话?

ps当不同的用户登录(主题)颜色时,根据客户端从数据库调用应用程序的徽标,这就是为什么我需要在第一页上读取子域以便我可以更改{{1}根据子域

这是我的一段代码,看看如果有人有兴趣我将如何实现这一目标

login logo

所以我想在这里的某个地方$currentUrl = $request->getHttpHost(); $baseUrl = $this->container->getParameter('base_url'); $subdomain = str_replace('.'.$baseUrl, '',$currentUrl); if (sizeof($user->getClients()) > 0) { $filter = $this->em->getFilters()->enable(Utils::CLIENT_FILTER_NAME); if ($user->getLastLoggedInClient() !== null) { $client = $user->getLastLoggedInClient(); } else { $client = $user->getClients()->first(); } if ($client == null) { throw new ClientNotFoundException(); } if(!$client->isActive()){ throw new ClientNotActiveException(); } $this->session->set(Utils::CLIENT_ID_NAME, $client->getId()); $this->session->set('client', $client); $filter->setParameter(Utils::CLIENT_ID_NAME, $client->getId()); $user->setLastLoggedInClient($client); $this->em->persist($user); $this->em->flush(); } else{ return new RedirectResponse('/logout'); } return new RedirectResponse('/'); 我需要重定向到正确的子域。

谢谢!

1 个答案:

答案 0 :(得分:1)

当您第一次意识到用户需要登录时(来自client1.example.com),请将URL或“client1”客户端名称放入会话中,可在www.example.com上阅读 - 或将其添加到网址(如https://www.example.com/login/to/client1 - 路线为'/login/to/{clientname}'),或更简单/login?clientname=client1

当用户已登录并被验证为“client1”的成员时,重定向将是'client_app_dashboard', ['clientname' => 'client1']之类的路由 - 并且路由定义为@Route("/", name="client_app_dashboard", host="{clientname}.example.com")

Symfony文档提供有关How to Match a Route Based on the Host的信息。

至于徽标 - 将根据www上的$clientname获取和显示。主页。