尝试将项目从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文档参考资料......
答案 0 :(得分:2)
发现问题是由于在编译器传递类中覆盖templating.loader.cache
到public
的定义以允许在功能测试期间进行访问。
基于此处的代码: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。