在bundle Extension中获取Symfony2环境

kie*_*ans 19 php symfony

在我的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)

希望这可以帮助!

  • 如果您将控制器作为服务,则可以注入``%kernel.environment%``` (7认同)

cra*_*ter 12

echo $this->container->get(‘kernel’)->getEnvironment(); 
Run Code Online (Sandbox Code Playgroud)

在最新版本(2.5)

  • Hiya,这可能很好地解决了这个问题...但是如果你能编辑你的答案并提供一些关于它如何以及为什么工作的更多解释会很好:)不要忘记 - 堆栈上有很多新手,他们可以从你的专业知识中学到一两件事 - 对你来说显而易见的事情对他们来说可能并非如此. (2认同)