parser symfony1 configuration-files yaml symfony-1.4

symfony1 - parser - Cómo crear un archivo de configuración yaml personalizado en Symfony



php yaml parser (6)

Lo que quiero hacer es bastante simple: almacenar datos en un archivo de configuración personalizado que quiero leer más adelante.

Creé mi archivo something.yml que puse en el directorio de config global. Se ve así:

prod: test: ok dev: test: ko all: foo: bar john: doe

Luego copié el archivo config_handlers.yml y también lo puse en el directorio de configuración y agregué lo siguiente en la parte superior del archivo:

config/something.yml: class: sfDefineEnvironmentConfigHandler param: prefix: something_

Pero si estoy llamando a sfConfig::get("something_foo"); Sigo recibiendo NULL .

¿Qué hice mal? Solo quiero leer valores, por lo que no es necesario crear un controlador de configuración de custome, ¿verdad?

He leído el documento aquí: http://www.symfony-project.org/book/1_2/19-Mastering-Symfony-s-Configuration-Files aunque estoy corriendo 1.4 (no creo que haya cambiado desde entonces).

Edición: por supuesto que puedo usar sfYaml::load() pero me gustaría hacer las cosas de una mejor manera.


¿Has borrado tus archivos de caché?

php symfony cc

En el entorno de producción, todos los archivos de configuración, clases, etc ... se almacenan en caché.


Es muy fácil, pero también un poco hacky:

Cree el archivo /config/config_handlers.yml y agregue esto:

config/something.yml: class: sfDefineEnvironmentConfigHandler param: prefix: something_

Luego agregue estas dos líneas a /web/index.php después de ... getApplicationConfiguration() (y también agréguelas a frontend_dev.php y donde quiera que desee que este archivo de configuración esté disponible):

$configCache = new sfConfigCache($configuration); include($configCache->checkConfig(''config/something.yml''));

Entonces, su /web/index.php podría verse así después:

<?php require_once(dirname(__FILE__).''/../config/ProjectConfiguration.class.php''); $configuration = ProjectConfiguration::getApplicationConfiguration(''frontend'', ''prod'', false); $configCache = new sfConfigCache($configuration); $configCache->checkConfig(''config/something.yml''); sfContext::createInstance($configuration)->dispatch();

Por cierto: esto también se encuentra en la documentación que citó, aunque la llamada checkConfig () se encuentra en un lugar diferente. Busque esto: "Cuando necesite el código basado en el archivo map.yml y generado por el controlador myMapConfigHandler en su aplicación, llame a la siguiente línea:"

Que te diviertas ;-)


Funciona en todos los archivos de aplicación:

$configCache = sfApplicationConfiguration::getActive()->getConfigCache(); $configCache->registerConfigHandler(''config/something.yml'', ''sfDefineEnvironmentConfigHandler'', Array(''prefix'' => ''something_'')); include $configCache->checkConfig(''config/something.yml'');

Entonces puedes usar:

sfConfig::get("something_foo");


No modifique el index.php esto está sucio!

Juste agrega esta línea a tu aplicación / frontend / config / frontendConfiguration.class.php

require_once($this->getConfigCache()->checkConfig(''config/something.yml''));

(adapta con tu propio nombre de aplicación)


Si está haciendo esto para un complemento , necesita cargar el archivo de configuración en el método initialize (). Aún puede usar config_handlers.yml en el directorio de configuración de su complemento o dejar que el complemento cargue el controlador también.

class myPluginConfiguration extends sfPluginConfiguration { public function setup() // loads handler if needed { if ($this->configuration instanceof sfApplicationConfiguration) { $configCache = $this->configuration->getConfigCache(); $configCache->registerConfigHandler(''config/features.yml'', ''sfDefineEnvironmentConfigHandler'', array(''prefix'' => ''feature_'')); $configCache->checkConfig(''config/features.yml''); } } public function initialize() // loads the actual config file { if ($this->configuration instanceof sfApplicationConfiguration) { $configCache = $this->configuration->getConfigCache(); include($configCache->checkConfig(''config/features.yml'')); } } }

El método config initialize () del complemento es llamado automáticamente por la clase sfProjectConfiguration y todas las clases appConfiguration (a través de la herencia).


Si su archivo de configuración en caché está vacío, es probable que haya olvidado configurar el entorno en su archivo yml.

me gusta:

all: test: value1 test2: value2 dev: test2: value3