Symfony如何将参数传递给yaml配置?

时间:2017-03-29 13:36:58

标签: php symfony yaml

Symfony Config组件允许创建和加载配置。例如,它允许使用yml进行配置。

但是,在Symfony框架中,配置使用具有特殊语法的参数 - %parameter.key%

我查看了Symfony YamlFileLoader,但它只加载yaml文件的内容并处理importsparametersservices等部分。 parameters的唯一目标是存储在容器参数包中。

所以我想知道在yaml配置文件中用于替换占位符的魔力是什么?

此外。我试图加载配置:

application:
    aBooleanKey: "true"

我收到错误,因为aBooleanKey需要一个布尔值但是有一个字符串。

3 个答案:

答案 0 :(得分:2)

  

所以我想知道在yaml配置文件中用什么神奇来代替占位符?

此参数是Dependency Injection组件的一部分,而不是Config

  

参数的唯一目标是存储在容器参数包中。

不完全。 Special compiler pass解析了占位符。它适用于container compilation的优化步骤并注入实际值,因此占位符可用于服务定义和语义配置文件中。

  

...我发现了一个错误,因为aBooleanKey需要一个布尔值但是得到了一个字符串。

我想这是由YAML Component引起的:

  

最后,还有其他一些必须引用字符串的情况,无论您是使用单引号还是双引号:

     
      
  • 当字符串为true或false时(否则,它将被视为布尔值);
  •   
     

...

因此,在您的示例中,true被引用并视为字符串。

答案 1 :(得分:0)

Bundles可以定义他们期望的配置类型,包括所需的值和限制类型。这通常在包的DependencyInjection/Configuration.php中完成。以下是FOSUserBundle配置的链接:https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/DependencyInjection/Configuration.php

TreeBuilder定义了结构,并且通过解析yaml(或其他配置格式)文件创建的配置被传入并根据需求进行验证。您还可以在Defining and Processing Configuration Values

上查看Symfony文档

答案 2 :(得分:0)

在symfony 3.4中,它们“修复”了作为参数转换为字符串的布尔值错误。

https://symfony.com/blog/new-in-symfony-3-4-advanced-environment-variables

parameters:
    # roughly equivalent to "(bool) getenv('CONNECTION_ENABLED')"
    app.connection.enabled: '%env(bool:CONNECTION_ENABLED)%'