我目前正在尝试测试我的 symfony2 扩展之一。为此,我已经实例化了一个容器构建器,然后在其上注册了我的扩展。
问题是我的扩展需要编译其他扩展(来自其他扩展的一些服务被注入到我测试的扩展服务中)。所以,我已经在我之前注册了这些其他扩展,以便能够编译容器。
$container = new ContainerBuilder();
$container->registerExtension(new AcmeOtherExtension());
$container->registerExtension(new AcmeMainExtension());
// Loads configuration
$container->compile();
此时,容器拒绝编译,IMO 由于缺少一些编译通道。所以,我添加了以下几行:
$container->getCompilerPassConfig()->setOptimizationPasses(array(new ResolveDefinitionTemplatesPass()));
$container->getCompilerPassConfig()->setRemovingPasses(array());
使用这些行,可以编译容器而不会出现任何错误,但是当我请求一个服务注入了来自另一个扩展的服务时,容器会抛出一个异常,通知我在另一个扩展中定义的服务不存在。
有人可以给我有关容器通行证和编译的提示吗?