Symfony - 作曲家更新 - 依赖注入配置 class 未找到

Symfony - composer update - Dependency Injection Configuration class not found

我们的项目部分由三个包组成,其中两个包含一个 Web 后端应用程序和一个关联的 API 由我们客户的前端单页应用程序使用,最后一个 "CoreBundle" 是在哪里共同资源直播。

这些包都有 DependencyInjection 的 (DI) 包子目录,但根本没有配置 class,因为其中 none 有任何特定配置。我们按照文档中的建议使用DI组件,理论上这个项目没有特殊情况会影响配置加载机制。
直到现在(Symfony 3.3.2)一直运行良好。

为了将 symfony/symfony 从 3.3.2 更新到 3.4,composer post-install script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache 生成了 2 个异常:

In Consistency.php line 337: Class Bundle\CoreBundle\DependencyInjection\Configuration\Configuration not found
In Consistency.php line 285: Class Bundle\CoreBundle\DependencyInjection\Configuration\Configuration not found

异常跟踪:

Exception trace:
 Hoa\Core\Consistency\Consistency::autoload() at n/a:n/a
 call_user_func() at /var/www/back-portal/vendor/symfony/symfony/src/Symfony/Component/Debug/DebugClassLoader.php:146
 Symfony\Component\Debug\DebugClassLoader->loadClass() at n/a:n/a
 spl_autoload_call() at n/a:n/a
 class_exists() at /var/www/back-portal/vendor/symfony/symfony/src/Symfony/Component/Config/Resource/ClassExistenceResource.php:78
 Symfony\Component\Config\Resource\ClassExistenceResource->isFresh() at /var/www/back-portal/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/ContainerBuilder.php:351
 Symfony\Component\DependencyInjection\ContainerBuilder->getReflectionClass() at /var/www/back-portal/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Extension/Extension.php:84
 Symfony\Component\DependencyInjection\Extension\Extension->getConfiguration() at /var/www/back-portal/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Compiler/MergeExtensionConfigurationPass.php:63
 Symfony\Component\DependencyInjection\Compiler\MergeExtensionConfigurationPass->process() at /var/www/back-portal/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/DependencyInjection/MergeExtensionConfigurationPass.php:39
 Symfony\Component\HttpKernel\DependencyInjection\MergeExtensionConfigurationPass->process() at /var/www/back-portal/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Compiler/Compiler.php:141
 Symfony\Component\DependencyInjection\Compiler\Compiler->compile() at /var/www/back-portal/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/ContainerBuilder.php:760
 Symfony\Component\DependencyInjection\ContainerBuilder->compile() at /var/www/back-portal/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php:625
 Symfony\Component\HttpKernel\Kernel->initializeContainer() at /var/www/back-portal/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php:137
 Symfony\Component\HttpKernel\Kernel->boot() at /var/www/back-portal/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:63
 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /var/www/back-portal/src/Component/MultiApp/MultiAppConsoleApplication.php:35
 Component\MultiApp\MultiAppConsoleApplication->doRun() at /var/www/back-portal/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:129
 Symfony\Component\Console\Application->run() at /var/www/back-portal/bin/console:31

添加配置 class,其 getConfigTreeBuilder() 方法返回一个新的 ("empty") Treebuilder 实例,使异常指向另一个包。我为我们的三个捆绑包这样做了,现在异常指出了 Sensio 自己的捆绑包之一。

In Consistency.php line 337: Class Sensio\Bundle\DistributionBundle\DependencyInjection\Configuration\Configuration not found …

以下是在抛出异常之前产生的一些 Composer 警告:

Dependency "symfony/polyfill-apcu" is also a root requirement, but is not explicitly whitelisted. Ignoring.
…
Package hoa/core is abandoned, you should avoid using it. Use hoa/consistency instead.
Package guzzle/guzzle is abandoned, you should avoid using it. Use guzzlehttp/guzzle instead.

执行 rm -rf var/cache/* 没有帮助。
运行 只有 bin/console cache:clear 抛出同样的异常。

现在我们的捆绑实施似乎与这个问题没有任何关系,我更不知道问题的根源是什么。也就是说,“spl_autoload_call() at n/a:n/a”这一行看起来很奇怪…… 可能是某些 Symfony 依赖项应该被强制到某些版本……? (顺便说一句 changelog 没有提供潜在原因的有用提示)

感谢您的帮助。

TL;DR: 这似乎是使用废弃包 hoa/core 的问题。

我可能找到了这个问题的解决方案,因为我遇到了 运行 php bin/console 导致错误

的相同问题

In Consistency.php line 337: Class Sensio\Bundle\DistributionBundle\DependencyInjection\Configuration\Configuration not found …

在我将我的 Symfony 应用程序从 2.8 升级到最新的 3.4 版本之后。

我不知道你的确切设置,但我也收到了关于被遗弃的 hoa/core 包的警告,所以在这里看到你的问题以及我们设置之间的相似之处,我很好奇,因为它状态 Use hoa/consistency instead.Consistency.php class 中有错误。啊哈!

所以我只是在我的 composer.json 上做了很多事情并且有这个过时的条目:

"hoa/regex": "~0.0"

这似乎需要废弃的 hoa/core 包。 对我来说,只需将其更改为

"hoa/regex": "~1.0"

解决了问题。但是因为我不知道你的确切 composer.json,我不知道你的包是如何依赖这个包的,所以你可能不太容易更新到 hoa/consistency.

希望对您有所帮助!