2011-12-23 27 views
6

No consigo que la configuración de symfony2 sobrescriba correctamente los valores de otros archivos de configuración. Aquí está el problema:symfony2 yaml: sobrescribir la configuración

Tengo un nuevo entorno "staging" donde quiero usar la mayoría de las cosas de config_prod.yml pero tengo otro nivel de registro (quiero que esté como está en desarrollo, simplemente registrando todo a un archivo). Aquí están los paquete de configuración de uso:

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: ~ 

Desde mi punto de vista, el registrador de anidado es ahora nula y los principales troncos al archivo dado. ¡Lo que realmente sucede es que registra cada mensaje dos veces! Lo mismo sucede cuando se utiliza esto para el config_staging.yml:

imports: 
    - { resource: config_prod.yml } 

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

he encontrado una solución, estableciendo el action_level del controlador principal para depurar y dejando todo lo demás como está, pero no me gusta esta solución . Debe haber una manera de sobrescribir las cosas de configuración, así que solo tengo el manejador principal de monólogos.

Respuesta

8

Casi un año más tarde que ahora tengo una comprensión de lo que está pasando y cómo prevenirlo:

El manejador nested se befilled con la configuración de la config.yml y al analizar la config_staging.yml, el componente yaml no sobrescribe todo el hashmap y establece el valor en null, pero trata de fusionar ambos, lo que resulta en la misma matriz que antes.

Hay un tipo llamado null que se puede utilizar para sobrescribir cualquier registrador. No hace nada y es adecuada para ello en este caso de uso:

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

Otra solución sería la de no configurar ningún registro en el config.yml pero sólo en las configuraciones de entorno específicas como config_prod.yml y así sucesivamente.

1

Compruebe que no tiene ninguna tecla repetida en el _stage config file - la segunda anularía la primera, con el resultado neto de que la primera se ignora.

+0

¡Comprobé esto, sin claves duplicadas allí! – Sgoettschkes

0

Si desea modificar una colección eliminando un elemento, deberá crear un archivo YAML intermedio (importando la base) configurando la colección como "nula" y volviendo a agregar todos los elementos de colección requeridos en un archivo que a su vez importa el archivo YAML intermedio.

No puede simplemente sobrescribir una colección. Se agregarán nuevos elementos pero no se pueden eliminar los existentes, excepto por la solución descrita.

Cuestiones relacionadas