如何在Symfony3中将slug移动到子域

时间:2017-08-08 22:46:17

标签: symfony wildcard-subdomain symfony-routing

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

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}/部分,因为我有数百个像这样定义的控制器。

有没有办法通过听众管理这个?

1 个答案:

答案 0 :(得分:0)

使用Symfony 3,您可以根据主机匹配路由。基本上你也可以" placeholderize"您的子域并在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