【发布时间】:2015-07-30 07:59:16
【问题描述】:
我有一个带有多个品牌(子域)的 Symfony2 项目。每个子域应使用相同的站点功能和相同的路由(具有不同的主机名)。因此,我想将路由路径中的子域设置为变量。现在看起来像:
mybundle_route:
resource: "@MyProjectBundle/Controller/"
type: annotation
prefix: /
host: "{subdomain}.%base_host%"
requirements:
subdomain: sub1|sub2
并且路由本身有效。但是如果我尝试生成一些路由(例如在树枝中),我会收到以下错误,因为没有设置子域变量:
缺少一些强制参数(“子域”)来为路由“company_route”生成 URL。
我不想将参数添加到项目中的每个 path() 函数。 如果我添加这样的默认值,它适用于一个子域:
defaults:
subdomain: sub1
但其他子域的路由错误。它也不适用于
defaults:
subdomain: "%subdomain%"
我需要的只是将 %subdomain% 变量传递给默认值,或者在控制器构造函数中的某个位置设置它。但我找不到它是怎么回事。我将不胜感激。
【问题讨论】:
-
defaults: subdomain: %subdomain%的解决方案应该根据 Symfony 文档工作。我可以看到您在%subdomain%.中的模式后有一个点。这只是这里的一个错字还是它不起作用的原因? -
我再次查看了 Symfony2 文档,发现还有一个不同之处。尝试将
%subdomain%放在双引号中 -"%subdomain%"。不确定它是否重要,但这就是它在示例中的完成方式。 symfony.com/doc/master/components/routing/hostname_pattern.html -
@dragoste 对不起,我的错。这是一个错字。我在脚本中没有点。我试过带和不带双引号。如果我将默认部分添加到配置中,我会收到以下错误:必须定义参数“子域”
-
看起来这是一个已知问题:github.com/symfony/symfony/issues/6857 也许您可以尝试创建一个侦听器服务来设置
subdomain参数。 -
@dragoste 我已经有一个了。您无法设置参数,因为 ParameterBag 已冻结。这种方式我已经试过了。