【问题标题】:Variables in config.ymlconfig.yml 中的变量
【发布时间】:2013-10-09 20:49:57
【问题描述】:

如果我在 Symfony2 中使用 /app/config/config.yml:

parameters:
    test_first: aaaa
    test_second: bbbb

twig:
    globals:
        first: %test_first%

然后这个工作正常

但我想制作:

parameters:
    test:
        first: aaaa
        second: bbbb

twig:
    globals:
        first: %test_first%

我有错误:

ParameterNotFoundException: 你请求了一个不存在的 参数“test_first”。

我该怎么做?

【问题讨论】:

  • parameters.yml 值映射到 service_container 的参数集合,给定平面键。您创建的是一个名为“test”的参数,它是一个关联数组。
  • 那我该怎么做呢?
  • %test.first% 有效吗?
  • %test.first% 不工作

标签: php symfony twig yaml


【解决方案1】:

依赖注入在 Symfony 中是一个冗长的主题,并且有大量关于细节的文档,所以我将在这里简单介绍一下。

parameters.yml 文件应包含平面键/值对。 配置文件应该从中读取,参数可以包含数组,但是您不能像这样在 Symfony 中引用 subs。

相反,您可以为配置节点提供整个参数数组。这将带您到: http://symfony.com/doc/current/components/config/definition.html

下一步是更改捆绑包扩展类中的服务容器。 http://symfony.com/doc/current/components/dependency_injection/compilation.html#managing-configuration-with-extensions

从包含 yml 参数的配置节点读取并创建容器参数的超集。

例如:

foreach($config['test'] as $key => $value) {
    $container->setParameter($this->getAlias().'.test.'.$key, $value);
}

这将创建一段参数,例如:

myapp.test.first  = aaaa
myapp.test.second = bbbb

并从控制器访问:

$value = $this->container->getParameter('myapp.test.first');

但请注意,bundle 不应真正依赖于 parameters.yml 值的存在,因为如果该参数不存在,上述语句将引发错误,除非您首先调用 hasParameter

【讨论】:

  • 参数是易变的,symfony 的设计方式是防止你在没有依赖注入的情况下进行复杂的配置,你仍然可以在没有参数的情况下将全局变量注入到 twig 中,或者更好地创建一个覆盖 getGlobals 的 Twig 扩展()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
相关资源
最近更新 更多