我在文档章节 Miscellaneous Configuration 中找到了以下未记录的功能:
资源文件可以是多种类型之一。 PHP,XML,YAML,INI和 关闭资源 导入指令 。
负责加载这些资源的班级似乎是:
Symfony \ Component \ DependencyInjection \ Loader \ ClosureLoader( APIdoc , Code )
根据文档的理解,应该可以使用配置文件中的 PHP闭包导入服务和/或参数。
非工作示例:
# app/config/config.yml
imports:
# closure? something like eval( <multiline-string> ) ?
- { resource: >
function($containerBuilder) {
return array(
'parameters' => array(
'upload_tmp_dir' => ini_get('upload_tmp_dir')
)
);
}
}
我找不到一个示例,说明如何在带有导入指令的PHP,XML,YAML配置文件中使用此加载器。
是否有使用imports
的可用示例?
ClosureLoader
是否与YAML
格式兼容?
有一个示例可以显示如何使用Symfony\Component\Routing\Loader\ClosureLoader
加载路径集合( Routes as Closures )。
但它没有说明如何使用带有imports
指令的闭包作为文档说明。
我的问题背后的想法是可能可以访问PHP的配置值或config.yml
中的某些类常量而无需创建扩展/编译器 - 以不同的配置格式传递或导入文件。 (即以YAML格式访问常量 not possible )。
这将开辟一些很好的可能性......
...比如添加一个闭包,为upload_tmp_dir
中的php.ini
路径导入一个参数,然后可以立即在LiipMonitorBundle的liip_monitor.checks.writable_directory
数组中使用。< / p>
答案 0 :(得分:0)
我已经能够在AppKernel
中使用该加载器:
class AppKernel extends \Symfony\Component\HttpKernel\Kernel
{
// ...
public function registerContainerConfiguration(LoaderInterface $loader)
{
$loader->load($this->getRootDir() . '/config/config_' . $this->getEnvironment() . '.yml');
// Load config from the closure
$loader->load(function () {
// ..
});
}
}
问题是重新计算缓存时没有考虑到这一点(例如,如果更改关闭,缓存不会更改)。
答案 1 :(得分:-1)
要使用ini文件,您可以将文件称为ressource:
- { resource: parameters.ini }
theres 4类型的闭包与symfony dependcyInjection组件(Symfony 2.3)。有IniFileLoader,PhpFileLoader,XmlFileLoader和YamlFileLoader。
要使用个人封口,您应该创建一个延伸自的个人封口 的Symfony \组件\ DependencyInjection \装载机\ FileLoader
这是一个很好的例子:http://www.adayinthelifeof.nl/2013/01/30/custom-symfony2-config-loader/