在 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