Gui*_*dre 18 yaml symfony1 configuration-files symfony-1.4
我想要做的很简单:将数据存储在我想要稍后阅读的自定义配置文件中.
我创建something.yml
了我放在全局config
目录中的文件.它看起来像这样:
prod:
test: ok
dev:
test: ko
all:
foo: bar
john: doe
Run Code Online (Sandbox Code Playgroud)
然后我复制了config_handlers.yml并将其放在config目录中,并在文件顶部添加了以下内容:
config/something.yml:
class: sfDefineEnvironmentConfigHandler
param:
prefix: something_
Run Code Online (Sandbox Code Playgroud)
但如果我打电话,sfConfig::get("something_foo");
我会继续NULL
.
我做错了什么?我只想读取值,所以不需要创建一个自定义配置处理程序,对吧?
我已经阅读了这里的文档:http://www.symfony-project.org/book/1_2/19-Mastering-Symfony-s-Configuration-Files即使我正在运行1.4(我不认为改变了自那时候起).
编辑:当然我可以使用,sfYaml::load()
但我想以更好的方式做事.
小智 12
不要修改index.php这很脏!
Juste将此行添加到您的app/frontend/config/frontendConfiguration.class.php中
require_once($this->getConfigCache()->checkConfig('config/something.yml'));
Run Code Online (Sandbox Code Playgroud)
(适应您自己的应用名称)
它真的很简单,但也有点hacky:
创建文件/config/config_handlers.yml
并添加:
config/something.yml:
class: sfDefineEnvironmentConfigHandler
param:
prefix: something_
Run Code Online (Sandbox Code Playgroud)
然后将这两行添加到/web/index.php
after ... getApplicationConfiguration()
(并将它们添加到frontend_dev.php以及您希望此配置文件可用的任何位置):
$configCache = new sfConfigCache($configuration);
include($configCache->checkConfig('config/something.yml'));
Run Code Online (Sandbox Code Playgroud)
所以你之后/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();
Run Code Online (Sandbox Code Playgroud)
顺便说一句:这也在你引用的文档中,尽管checkConfig()调用位于不同的地方.请查看:"当您需要基于map.yml文件的代码并由应用程序中的myMapConfigHandler处理程序生成时,请调用以下行:"
玩得开心 ;-)
如果您正在为插件执行此操作,则需要在initialize()方法中加载配置文件.您仍然可以在插件的config目录中使用config_handlers.yml,或者让插件加载处理程序.
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'));
}
}
}
Run Code Online (Sandbox Code Playgroud)
插件的config initialize()方法由sfProjectConfiguration类和所有appConfiguration类(通过继承)自动调用.
归档时间: |
|
查看次数: |
12747 次 |
最近记录: |