【问题标题】:Access global parameters from route condition expressions in Symfony从 Symfony 中的路由条件表达式访问全局参数
【发布时间】:2014-12-23 18:27:51
【问题描述】:

我正在尝试从路由条件 (documentation) 中的表达式访问应用程序范围的 symfony 参数(在 app/config/parameters.yml 中定义)。

我尝试将参数插入百分号和通过函数“参数”(如 DI here 所述),但均无济于事。

下面是带参数函数的例子:

example_route:
    path:     /example/{_locale}
    condition: "request.getLocale() in parameter('locales_array')"
    defaults: 
        _controller: "AcmeExampleBundle:Example:index"
        _locale: %locales_default%


但是我得到了:

SyntaxError - 函数“参数”在位置 24 附近不存在。


有没有办法从路由条件表达式中访问参数?

【问题讨论】:

  • 我认为parameter表达式语言功能只有在Container生命周期表达式中才有。您可能必须自己注册该功能。
  • @YannEugoné 我希望有一种方法可以不用自己注册parameter 函数。恕我直言,访问全局参数应被视为标准行为...
  • 我完全同意你的看法。但是 ExpressionLanguage 不是一个旧组件(> = 2.4),因此您可能需要一些未实现的功能......在快速查看文档后(再次)我在任何示例中都没有看到您的用例。我看到 parameter 函数的 Symfony 的唯一部分是 DIC,所以...

标签: php symfony symfony-2.4 symfony-routing


【解决方案1】:

我在https://github.com/symfony/symfony/pull/12869 为 2.7 版本打开了一个 PR,在它完成并交付之前,如果 UrlMatcher 在您需要添加容器函数提供程序并注入容器的项目中,您将不得不使用自己的扩展版本在 ExpressionLanguage#evaluate 的“变量”参数中,以便您能够访问参数和服务。

你可以看看 PR 来获得如何做的提示,如果你以后需要,我会写得更详细。

【讨论】:

    【解决方案2】:

    你很幸运(我有点晚了),我正在使用语法 %variable% 从表达式访问 Symfony 参数。

    这是你的例子,在 Symfony 3 中测试过:

    example_route:
        path:     /example/{_locale}
        condition: "request.getLocale() in ['%locales_array%']"
        defaults: 
            _controller: "AcmeExampleBundle:Example:index"
            _locale: %locales_default%
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 2018-06-15
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 2022-08-04
      相关资源
      最近更新 更多