【问题标题】:How to pass a variable to routing defaults in Symfony?如何将变量传递给 Symfony 中的路由默认值?
【发布时间】: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 已冻结。这种方式我已经试过了。

标签: php symfony routing


【解决方案1】:

如果没有更好的解决方案可以尝试在配置文件中设置%subdomain%参数:

  1. 在配置文件夹中创建subdomain_parameter.php
  2. 在此文件中,您可以访问$container,因此您可以从 url 手动检索当前子域并将其传递给容器。
  3. 在config.yml中导入subdomain_parameter.php

【讨论】:

  • 这是一个非常肮脏的解决方案。但它有效 - 谢谢。如果明天晚上之前没有其他可以接受的答案,我会接受这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
相关资源
最近更新 更多