在我的 Symfony2 包扩展中,我的 services.yml
正在加载
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
$loader->load('services.yml');
但是我想为每个环境加载不同的服务配置(例如:不同的测试环境)。
我找到的大多数获取当前环境的示例都是在 Controller 内访问(例如:$this->get('kernel')->getEnvironment()
),但是 Controller 在扩展中不可能基于访问。
根据 Twig extension - symfony2 environment环境可以被构造函数注入(inject)但是我不确定我的包扩展是如何被 Symfony 注册/实例化的所以不知道如何注入(inject)环境(我通过 grep 找到的唯一引用是在缓存文件中,这不是太有帮助)。
我如何在配置中为每个环境指定要加载的不同服务 YAML 文件,或者至少找出环境以便我可以编写我的扩展类以加载正确的文件?
最佳答案
通常,在加载您的服务时,您的方法原型(prototype)应该是
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');
}
...
希望这对您有所帮助!
关于php - 在 bundle Extension 中获取 Symfony2 环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16563769/