Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
symfony2 yaml:覆盖配置_Symfony_Yaml - Fatal编程技术网

symfony2 yaml:覆盖配置

symfony2 yaml:覆盖配置,symfony,yaml,Symfony,Yaml,我无法使symfony2配置正确覆盖其他配置文件中的值。问题是: 我有一个新的环境“staging”,在这里我想使用config_prod.yml中的大部分内容,但有另一个日志记录级别(我希望它与开发中的一样,只需将所有内容记录到一个文件中)。以下是我使用的配置: config_prod.yml: imports: - { resource: config.yml } monolog: handlers: main: type: fing

我无法使symfony2配置正确覆盖其他配置文件中的值。问题是:

我有一个新的环境“staging”,在这里我想使用config_prod.yml中的大部分内容,但有另一个日志记录级别(我希望它与开发中的一样,只需将所有内容记录到一个文件中)。以下是我使用的配置:

config_prod.yml:

imports:
    - { resource: config.yml }

monolog:
    handlers:
        main:
            type: fingers_crossed
            action_level: error
            handler: nested
        nested:
            type: stream
            path: %kernel.logs_dir%/%kernel.environment%.log
            level: debug
config_staging.yml:

imports:
    - { resource: config_prod.yml }

monolog:
    handlers:
        main:
            type: stream
            path: %kernel.logs_dir%/%kernel.environment%.log
            level: debug
        nested: ~
imports:
    - { resource: config_prod.yml }

monolog:
    handlers:
        main:
            type: stream
            path: %kernel.logs_dir%/%kernel.environment%.log
            level: debug
            handler: ~
        nested: ~
在我看来,嵌套记录器现在为null,并且主日志指向给定文件真正发生的是,他将每条消息记录两次当我将其用于config_staging.yml时,也会发生同样的情况:

imports:
    - { resource: config_prod.yml }

monolog:
    handlers:
        main:
            type: stream
            path: %kernel.logs_dir%/%kernel.environment%.log
            level: debug
        nested: ~
imports:
    - { resource: config_prod.yml }

monolog:
    handlers:
        main:
            type: stream
            path: %kernel.logs_dir%/%kernel.environment%.log
            level: debug
            handler: ~
        nested: ~

我找到了一个解决方法,将主处理程序的action_级别设置为debug,并保留其他所有内容,但我不喜欢这个解决方案。必须有一种方法覆盖配置文件,所以我只有主monolog处理程序。

检查\u staging config文件中没有任何重复的键——第二个会覆盖第一个,最终结果是第一个被忽略了。

差不多一年后,我现在了解了正在发生的事情以及如何预防它:

嵌套的
处理程序被来自
config.yml
的配置填充,并且在解析
config_staging.yml
时,yaml组件不会覆盖整个hashmap并将值设置为null,而是尝试合并这两个值,从而产生与以前相同的数组

有一种类型称为
null
,可用于覆盖任何记录器。它不起任何作用,因此适用于此用例:

monolog:
    handlers:
        main:
            type: stream
            path: %kernel.logs_dir%/%kernel.environment%.log
            level: debug
            handler: ~
        nested: ~
            type: null

另一种解决方案是不在config.yml中配置任何日志记录,而只在特定的环境中配置,如
config\u prod.yml
等等。

如果要通过删除元素来更改集合,则必须创建一个中间YAML文件(导入基文件),将集合设置为“null”以及在一个文件中重新添加所有必需的集合元素,从而导入中间YAML文件


不能简单地覆盖集合。新元素将被添加,但您不能删除现有元素,除非使用所述的解决方法。

我选中了此元素,其中没有重复的键!