创建配置收集器以在应用程序

时间:2015-12-14 13:01:10

标签: symfony

我正在寻找在应用程序中公开配置设置的方法,我可以在任何捆绑包中添加我想要的内容。这样做的目的是向HTML公开几个东西,解析它并在JS中使用。

基础部分ConfigService可以添加ConfigUnit自己的逻辑。

ConfigServiceInterface:

public function getConfig();
public function addUnit(ConfigUnitInterface $unit);

ConfigUnitInterface:

public function getName();
public function getConfig();

最好是在service.yml中添加单位,如下所示:

services:
  service.config:
    class: ConfigService
    calls:
      - [ addUnit, [ "@unit" ] ]
      - [ addUnit, [ "@unit2" ] ]

但是配置服务应该在某个包中声明,开发人员不能更改它的声明。

我想到的第二件事是声明具有调用寄存器方法的单元,它将ConfigService作为参数。

config_unit:
    class: ConfigUnit
    arguments: [...]
    calls:
      - [ register, [ "@service.config" ] ]

但是这并不好,我必须将此服务提供给init调用,所以每次都必须从容器中获取它。

有没有办法自动执行此操作?并尽可能分开?

也许事件对此很好,但我不想让开发人员直接修改配置数组。

1 个答案:

答案 0 :(得分:0)

我发现了怎么做。

文档有助于:

tagscompiler pass

我的每个单元现在都标有:' config.unit'

config_unit:
  class: ConfigUnit
  arguments: [...]
  tags:
    -  { name: config.unit }

这些由CompilerPass处理并注入ConfigService