在捆绑包扩展中获取 Symfony2 环境

2022-08-30 20:26:34

在我的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找到的唯一引用是在缓存文件中,这不是太有帮助)。

如何指定要在配置中的每个 env 加载的其他服务 YAML 文件,或者至少找出环境,以便对扩展类进行编码以加载正确的文件?


答案 1

通常,在加载服务时,方法原型应

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

希望这有帮助!


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

在最新版本中 (2.5)


推荐