未找到Symfony升级3.3到3.4服务

时间:2018-04-09 10:38:52

标签: php symfony

尝试将项目从Symfony 3.3升级到3.4。我已完成composer update symfony/symfony --with-depdencies并将public: false添加到我的services.yml文件中。

现在,当我运行PHPUnit测试时,我收到此错误:

Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException : The service "templating.loader.cache" has a dependency on a non-existent service "templating.loader.wrapped".

为什么会这样?我根本无法找到任何Google搜索结果或任何Symfony文档参考资料......

2 个答案:

答案 0 :(得分:2)

发现问题是由于在编译器传递类中覆盖templating.loader.cachepublic的定义以允许在功能测试期间进行访问。

基于此处的代码:https://github.com/symfony/symfony-docs/issues/8097

tl; dr不要这样做:

final class TestCompilerPass implements CompilerPassInterface
{
    /** {@inheritdoc} */
    public function process(ContainerBuilder $container)
    {
        foreach ($container->getDefinitions() as $id => $definition) {
            $definition->setPublic(true);
        }
    }
}

而是将您公开的服务限制为您实际需要的服务。

答案 1 :(得分:0)

除非您为私有服务准备了代码,否则不应使用public:false标记。这用于将服务标记为私有。可能在代码中的某处,您有$var = $container->get('example');之类的东西,它们会调用公共服务。您可以阅读更多here