20

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

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

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

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

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

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

4

2 回答 2

40

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

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');
}
...

希望这可以帮助!

于 2013-05-15T11:52:15.503 回答
12
echo $this->container->get(‘kernel’)->getEnvironment(); 

在最新版本 (2.5)

于 2014-11-19T04:50:39.540 回答