【问题标题】:How to move slug to subdomain in Symfony3如何在 Symfony3 中将 slug 移动到子域
【发布时间】:2017-08-08 22:46:16
【问题描述】:

我有一个网络应用程序,每个用户都有自己的个性化链接

https://app.myapp.com/{uuid}/frontpage

其中uuid表示从数据库加载的用户资源。

现在,想法是将/{uuid}/ 移动到子域,所以它应该如下所示:

https://{uuid}.myapp.com/frontpage

虽然我已经创建了通配符 DNS 并且可以轻松地在 Symfony 的控制器中提取子域,但问题现在是如何告诉 Symfony uuid 现在应该从子域中获取。

在控制器中,我的路由定义如下

/**
 * @Route("/{uuid}/frontpage", name="frontpage")
 * @ParamConverter("user", class="AppBundle:User", converter="converter.user")
 * @Template("FrontPage.html.twig")
 */
public function indexAction(Request $request, User $user)
{

}

我想避免重写所有控制器并去掉/{uuid}/ 部分,因为我有数百个这样定义的控制器。

有没有办法通过监听器来管理这个?

【问题讨论】:

  • 如果您执行全局正则表达式查找/替换,然后将 "/{uuid}/frontpage" 转换为 "/frontpage", host="{uuid}.yoursite.com" 怎么办?
  • AFAIK 这应该通过 RouterListener 完成,但我必须承认,我还没有深入研究这个主题。当然,您会在这里找到有用的信息:knpuniversity.com/screencast/symfony-journey/…
  • @Jason Roman 感谢您的建议。它可以工作,但是这需要在注释中进行更多样板工作,因为yoursite.com 由于开发服务器的原因也必须是动态的,所以我正在寻找更复杂的解决方案
  • @Jan Rydrych 我已经看过这个链接,但是我会更深入地了解 RouteListener,谢谢!

标签: symfony wildcard-subdomain symfony-routing


【解决方案1】:

使用 Symfony 3,您可以根据主机匹配路由。基本上,您还可以“占位符”您的子域并在您的 HttpFoundation\Request 对象中获取相关值(例如在您的控制器中)。

例如。 :

mobile_homepage:
path:     /
host:     "{subdomain}.example.com"
defaults:
    _controller: AppBundle:Main:mobileHomepage
    subdomain: m

https://symfony.com/doc/current/routing/hostname_pattern.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 2021-11-03
    相关资源
    最近更新 更多