symfony2 yaml: перезаписать конфигурацию - PullRequest
6 голосов
/ 23 декабря 2011

Я не могу заставить конфигурацию 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: ~

С моей точки зрения, вложенный регистратортеперь null и основные журналы для данного файла. Что действительно происходит, так это то, что он регистрирует каждое сообщение дважды! То же самое происходит, когда я использую это для config_staging.yml:

imports:
    - { resource: config_prod.yml }

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

Я нашел обходной путь, установив уровень action_le из основногообработчик для отладки и оставления всего остального как есть, но мне не нравится это решение.Должен быть способ перезаписать данные конфигурации, чтобы у меня был только основной обработчик монологов.

Ответы [ 3 ]

8 голосов
/ 03 декабря 2012

Спустя почти год у меня есть понимание того, что происходит и как это предотвратить:

Обработчик nested заполняется конфигурацией из config.yml и при разборе config_staging.ymlкомпонент yaml не перезаписывает всю хэш-карту и устанавливает значение null, но пытается объединить оба, что приводит к тому же массиву, что и раньше.

Существует тип с именем null, который можно использовать для перезаписилюбой логгер.Он ничего не делает и поэтому подходит для этого варианта использования:

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

Другое решение состоит в том, чтобы не настраивать ведение журнала в config.yml, а только в определенных конфигурациях среды, таких как config_prod.yml и так далее.

1 голос
/ 14 февраля 2012

Убедитесь, что у вас нет повторяющихся ключей в файле конфигурации _staging - второй переопределяет первый, в результате чего первый результат игнорируется.

0 голосов
/ 19 июля 2017

Если вы хотите изменить коллекцию, удалив элемент, вам нужно будет создать промежуточный файл YAML (импортировать базу), установив для коллекции значение «ноль» и повторно добавив все необходимые элементы коллекции в файл, который в свою очередь импортирует промежуточный файл YAML.

Вы не можете просто перезаписать коллекцию. Новые элементы будут добавлены, но вы не можете удалить существующие, за исключением описанного обходного пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...