我正在制作一个处理子域的网站,我已经设置了一个名为base_host的环境变量,现在我想在Symfony 4中使用@route
注解。
我已经尝试了@Route("/", name="homepage", host="{afdeling}.{domain}", defaults={"domain"="%env(base_host)%"}, requirements={"domain"="%env(base_host)%"})
,但这给予我一个错误:using %env(base_host)% is not allowed in routing configuration
我也试过:@Route("/", name="homepage", host="{afdeling}.%env(base_host)%")
这根本不起作用。
我也试过:@Route("/", name="homepage", host="{afdeling}.{domain}", defaults={"domain"="%base_host%"}, requirements={"domain"="%base_host%"})
,但这给了我错误消息:The parameter "base_host" must be defined.
我怎样才能做到这一点?
2条答案
按热度按时间c90pui9n1#
路由配置中不支持环境变量。作为解决方案,您可以创建一个“proxy”容器参数来实现它:
字符串
然后对任何路由选项使用
%base_host%
。nfg76nw02#
接受的答案有一个显著的缺点,例如,如果你正在构建一个Docker镜像,然后需要在运行时更改BASE_HOST的值。
问题的核心是,在预热缓存时(很可能在构建映像时)可用的
BASE_HOST
值将被烘焙到预编译的路由中。因此,如果您使用
BASE_HOST=example1.com
构建映像,然后在使用BASE_HOST=somethingelse.com
的环境中运行它,您的应用程序仍然会在其路由中包含example1.com
。这将导致重定向、路由匹配等不期望的行为。
我目前的解决方案不是在构建过程中预热该高速缓存,而是依赖于容器在目标环境中启动时构建它。这样做的缺点是我无法再在完全只读的文件系统上运行应用程序。