在我的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类来加载正确的文件?
答案 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)