我们的项目部分由三个包组成,其中两个包括Web后端应用程序和客户前端单页应用程序使用的相关API,最后一个“CoreBundle”是公共资源所在的位置。
这些bundle都有一个DependencyInjection(DI)bundle子目录,但根本没有Configuration类,因为它们都没有任何特定的配置。我们使用文档中建议的DI组件,理论上该项目中没有可能影响配置加载机制的特殊情况。
这一直运作良好直到现在(Symfony 3.3.2)。
为了将symfony / symfony从3.3.2更新到3.4,composer安装后脚本Sensio \ Bundle \ DistributionBundle \ Composer \ ScriptHandler :: clearCache生成2个例外:
在Consistency.php第337行中:未找到类Bundle \ CoreBundle \ DependencyInjection \ Configuration \ Configuration 在Consistency.php第285行:未找到类Bundle \ CoreBundle \ DependencyInjection \ Configuration \ Configuration
异常追踪:
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
添加一个Configuration类,其getConfigTreeBuilder()
方法返回一个新的(“空”)Treebuilder实例,使异常指出另一个bundle。我为我们的三个捆绑包做了这个,现在例外指出了一个Sensio自己的捆绑包。
在Consistency.php第337行:未找到类Sensio \ Bundle \ DistributionBundle \ DependencyInjection \ Configuration \ Configuration ...
以下是在抛出异常之前产生的一些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没有提供有用的暗示原因)
感谢您的帮助。
答案 0 :(得分:0)
TL; DR:使用废弃的软件包hoa/core
似乎存在问题。
我可能会在这个问题上找到解决方案,因为我遇到了运行php bin/console
导致错误的同样问题
在Consistency.php第337行:未找到类Sensio \ Bundle \ DistributionBundle \ DependencyInjection \ Configuration \ Configuration ...
将我的Symfony应用程序从2.8升级到最新的3.4版本。
我不知道您的确切设置,但我也有关于已放弃的hoa/core
包的警告,所以在这里看到您的问题以及我们的设置之间的相似之处,我对此感到好奇,因为它说明了
Use hoa/consistency instead.
类中存在错误时Consistency.php
。 AHA!
所以我只是在我的composer.json
上花了很多钱,这个过时的条目就是这样:
"hoa/regex": "~0.0"
似乎需要废弃的hoa/core
包。
对我来说,只需将其改为
"hoa/regex": "~1.0"
解决了这个问题。但由于我不知道你的确切composer.json
,我不知道你的捆绑包是如何依赖这个包的,所以你可能不容易更新到hoa/consistency
。
希望这有帮助!