我有一个Yaml加载程序,它为“配置文件”(其中一个应用程序可以使用不同配置文件,例如用于同一站点的不同本地版本)加载其他配置项。Symfony 2 - 如何在我自己的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代码和文档(和this SO question)进行拖拽,并且无法找到在框架本身内部完成的任务,我可能编写自己的参数解析器 - 从内核获取参数,搜索为%foo%字符串和查找/替换...但如果有一个组件准备好使用,我更喜欢使用这个。
为了给出更多的背景,为什么我不能只包含它到主要config.yml中:我想能够加载app/config/profiles/*.yml
,其中*
是配置文件名称,我使用自己的Loader来完成此操作。如果有通配符导入配置文件的方法,那么也可能适用于我。
注意:目前使用2.4,但如果有帮助,可以升级到2.5。