Как создать собственный файл конфигурации yaml в Symfony

То, что я хочу сделать, довольно просто: сохранить данные в пользовательском конфигурационном файле, который я хочу прочитать позже.

Я создал свой файл something.yml который я положил в глобальный каталог config . Это выглядит так:

prod:
  test:  ok

dev:
  test: ko

all:
  foo:  bar
  john: doe

Затем я скопировал config_handlers.yml, а также поместил его в каталог config и добавил следующее в начало файла:

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

Но если я звоню sfConfig :: get ("something_foo"); Я продолжаю получать NULL .

Что я сделал не так? I just want to read values, so no need to create a custome config handler, right?

I've read the doc here: http://www.symfony-project.org/book/1_2/19-Mastering-Symfony-s-Configuration-Files even though I'm running 1.4 (I don't think that changed since then).

Edit: Of course I can use sfYaml::load() but I'd like to do things in a better way.

18
задан Guillaume Flandre 30 March 2010 в 12:28
поделиться

2 ответа

Это действительно просто, но также немного хитро:

Создайте файл /config/config_handlers.yml и добавьте это:

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

Затем добавьте эти две строки в /web/index.php после ... getApplicationConfiguration () (а также добавьте их в frontend_dev.php и везде, где вы хотите, чтобы этот файл конфигурации был доступен):

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

Итак, ваш / web / index. php впоследствии может выглядеть так:

<?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();

Кстати: Это также есть в документации, которую вы процитировали, хотя вызов checkConfig () находится в другом месте. Найдите это: «Если вам нужен код, основанный на файле map.yml и сгенерированный обработчиком myMapConfigHandler в вашем приложении, вызовите следующую строку:»

Удачи; -)

5
ответ дан 30 November 2019 в 08:37
поделиться

Вы очистили файлы кэша?

php symfony cc

В среде prodution все файлы конфигурации, классы и т.д... кэшируются.

0
ответ дан 30 November 2019 в 08:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: