在bundle Extension中获取Symfony2环境

时间:2013-05-15 11:25:21

标签: php symfony

在我的Symfony2捆绑扩展中,我正在加载services.yml

$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
$loader->load('services.yml');

但是我想为每个环境加载不同的服务配置(例如:不同的测试用)。

我发现获取当前环境的大多数示例都是在控制器内进行访问(例如:$this->get('kernel')->getEnvironment()),但是在扩展中无法进行基于Controller的访问。

根据Twig extension - symfony2 environment,环境可以是构造函数注入但是我不确定我的bundle扩展是如何被Symfony注册/实例化的,因此不确定如何注入环境(我通过grep找到的唯一引用是在缓存文件中,这没有太大帮助。)

如何在config中为每个env指定要加载的不同服务YAML文件,或者至少找出环境以便我可以编写Extension类来加载正确的文件?

2 个答案:

答案 0 :(得分:36)

通常,在加载服务时,您的方法原型应该是

public function load(array $configs, ContainerBuilder $container).

然后您可以访问您的环境

$env = $container->getParameter("kernel.environment")

然后测试$ env以查看您所处的环境类型。

这样的东西
if ("dev" == $env) {
    $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
    $loader->load('devServices.yml');
}
...

希望这有帮助!

答案 1 :(得分:12)

echo $this->container->get(‘kernel’)->getEnvironment(); 

在最新版本(2.5)

相关问题