在 Symfony 4 中为路由配置默认主机
Configure a default host for routes in Symfony 4
到目前为止,我的 Symfony 应用程序托管一个域。现在,我需要在另一个域上托管几个页面。出于商业原因,这必须作为一个单独的域显示给用户,即使它实际上属于同一个应用程序。
假设我的应用托管在 example1.com
上。
我需要在 example2.com
.
上托管一些页面
所以我创建了一个新控制器:
class NewsletterController extends AbstractController
{
/**
* @Route("/unsubscribe", name="newsletter_unsubscribe", host="example2.com")
*/
public function unsubscribe(): Response
{
return $this->render('newsletter/unsubscribe.html.twig');
}
}
这很好用;页面提供正确,/unsubscribe
路径仅在 example2.com
上请求时路由。在 example1.com
上,它 returns 符合预期 404
。
问题是,现在所有打算在主域 example1.com
上匹配的路由也在 example2.com
上匹配,这不是我想要的。
当然,我可以将所有其他 @Route
注释更改为包括 host="example1.com"
,但这很麻烦,并且将来容易出错。
有没有办法在默认情况下为所有路由要求 host
,除非在 @Route
注释中被覆盖?
这不是最终解决方案,但它可以帮助...
您可以为每个控制器设置 @Route 注释 class 并为每个域分隔控制器...
/**
* @Route(host="example2.com")
*/
class NewsletterController extends AbstractController
{
/**
* @Route("/unsubscribe", name="newsletter_unsubscribe")
*/
public function unsubscribe(): Response
{
return $this->render('newsletter/unsubscribe.html.twig');
}
}
我们会尽快找到更好的解决方案:)
您可以在 annotation.yaml
中定义默认主机
//config\routes\annotations.yaml
controllers:
resource: ../../src/Controller/
type: annotation
host: mydomain.com
到目前为止,我的 Symfony 应用程序托管一个域。现在,我需要在另一个域上托管几个页面。出于商业原因,这必须作为一个单独的域显示给用户,即使它实际上属于同一个应用程序。
假设我的应用托管在 example1.com
上。
我需要在 example2.com
.
所以我创建了一个新控制器:
class NewsletterController extends AbstractController
{
/**
* @Route("/unsubscribe", name="newsletter_unsubscribe", host="example2.com")
*/
public function unsubscribe(): Response
{
return $this->render('newsletter/unsubscribe.html.twig');
}
}
这很好用;页面提供正确,/unsubscribe
路径仅在 example2.com
上请求时路由。在 example1.com
上,它 returns 符合预期 404
。
问题是,现在所有打算在主域 example1.com
上匹配的路由也在 example2.com
上匹配,这不是我想要的。
当然,我可以将所有其他 @Route
注释更改为包括 host="example1.com"
,但这很麻烦,并且将来容易出错。
有没有办法在默认情况下为所有路由要求 host
,除非在 @Route
注释中被覆盖?
这不是最终解决方案,但它可以帮助...
您可以为每个控制器设置 @Route 注释 class 并为每个域分隔控制器...
/**
* @Route(host="example2.com")
*/
class NewsletterController extends AbstractController
{
/**
* @Route("/unsubscribe", name="newsletter_unsubscribe")
*/
public function unsubscribe(): Response
{
return $this->render('newsletter/unsubscribe.html.twig');
}
}
我们会尽快找到更好的解决方案:)
您可以在 annotation.yaml
中定义默认主机//config\routes\annotations.yaml
controllers:
resource: ../../src/Controller/
type: annotation
host: mydomain.com