Symfony2:如何在扩展的load()方法中访问服务?

时间:2014-05-18 10:43:39

标签: symfony dependency-injection doctrine

是否可以在捆绑扩展中获取doctrine服务?

我可以访问容器,但无法获得教条服务。

...
class UltroExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container){
        $dm = $container->get('doctrine_mongodb');
    ...
    }
}

我收到此错误:服务定义“doctrine_mongodb”不存在。

1 个答案:

答案 0 :(得分:4)

容器尚未构建/编译 - 这就是为什么只有ContainerBuiler对象传递给load()方法的原因。

您无法从构建器获取服务对象,因为它不会保留服务,而只会保留服务定义

改为使用 compiler pass 。有关详细信息,请参阅文档章节 Compiling the container

也许您的问题也可以使用 service factory 来解决。