在我的Symfony2包扩展中,我services.yml正在加载
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
$loader->load('services.yml');
Run Code Online (Sandbox Code Playgroud)
但是我希望为每个环境加载不同的服务配置(例如:用于测试的不同服务配置).
我发现获取当前环境的大多数示例都是在控制器内进行访问(例如:) $this->get('kernel')->getEnvironment(),但是在扩展中无法实现基于Controller的访问.
根据Twig扩展 - symfony2环境,环境可以是构造函数注入但是我不确定我的bundle扩展是如何被Symfony注册/实例化的,因此不确定如何注入环境(我通过grep找到的唯一引用是在缓存中文件,这没有太大帮助).
如何在config中为每个env指定要加载的不同服务YAML文件,或者至少找出环境以便我可以编写Extension类来加载正确的文件?
Yoa*_*net 36
通常,在加载服务时,您的方法原型应该是
public function load(array $configs, ContainerBuilder $container).
Run Code Online (Sandbox Code Playgroud)
那么你可以访问你的环境做一个
$env = $container->getParameter("kernel.environment")
Run Code Online (Sandbox Code Playgroud)
然后测试$ env以查看您所处的环境类型.
就像是
if ("dev" == $env) {
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('devServices.yml');
}
...
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
cra*_*ter 12
echo $this->container->get(‘kernel’)->getEnvironment();
Run Code Online (Sandbox Code Playgroud)
在最新版本(2.5)