我有一个Yaml加载器,为"配置文件"加载其他配置项(其中一个应用程序可以使用不同的配置文件,例如,对于同一站点的不同本地版本).
我的装载机非常简单:
# YamlProfileLoader.php use Symfony\Component\Config\Loader\FileLoader; use Symfony\Component\Yaml\Yaml; class YamlProfileLoader extends FileLoader { public function load($resource, $type = null) { $configValues = Yaml::parse($resource); return $configValues; } public function supports($resource, $type = null) { return is_string($resource) && 'yml' === pathinfo( $resource, PATHINFO_EXTENSION ); } }
加载器或多或少都像这样使用(简化了一下,因为还有缓存):
$loaderResolver = new LoaderResolver(array(new YamlProfileLoader($locator))); $delegatingLoader = new DelegatingLoader($loaderResolver); foreach ($yamlProfileFiles as $yamlProfileFile) { $profileName = basename($yamlProfileFile, '.yml'); $profiles[$profileName] = $delegatingLoader->load($yamlProfileFile); }
它解析的Yaml文件也是如此:
# profiles/germany.yml locale: de_DE hostname: %profiles.germany.host_name%
目前,结果数组包含字面上'%profiles.germany.host_name%'
的'hostname'
数组键.
那么,如何解析%参数以获取实际参数值?
我一直在浏览Symfony 2代码和文档(这个SO问题,无法在框架内找到这样做的地方.我可以编写自己的参数解析器 - 从内核中获取参数,搜索%foo%字符串和查找/替换...但如果有一个组件准备好使用,我更喜欢使用它.
为了给出更多背景知识,为什么我不能将它包含在主config.yml中:我希望能够加载app/config/profiles/*.yml
,*
配置文件名称在哪里,我使用自己的Loader来完成此任务.如果有一种通配符导入配置文件的方法,那么这对我也有用.
注意:目前正在使用2.4但只是准备升级到2.5,如果这有帮助.