我正在尝试更新 symfony 2.8 应用程序以使用 PHP 7.4,但是当我尝试清除缓存 php app/console cache:clear
时,我收到以下警告:
[Symfony\Component\Debug\Exception\ContextErrorException]
Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"?
这会导致“脚本以非零代码退出”。这搞乱了 Jenkins 的整个自动化流程。我运行的解决方案通常是一个简单的 Composer 更新,但是在我执行此操作并将 Composer 更新到最新版本(当前为 2.0.7)后,错误仍然存在,并且我确信这不是 Composer 问题,因为此警告甚至仅使用 symfony 的 cache:clear
命令也会崩溃。我正在考虑从这个特定的版本分支创建我自己的 symfony 分支并自己修复错误,但我找不到此 continue
发生的确切位置。
如何消除这个错误,或者至少如何调试整个过程,以便我自己修复错误?
感谢任何帮助。预先感谢!
编辑:
这是运行php app/console cache:clear --verbose
后返回的消息。我没有看到任何潜在的继续错误的迹象。你们中有人看到过这样的事情吗?
Exception trace:
() at
/var/www/html/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php:2636
Symfony\Component\Debug\ErrorHandler->handleError() at
/var/www/html/vendor/symfony/symfony/src/Symfony/Component/Debug/DebugClassLoader.php:169
require() at /var/www/html/vendor/symfony/symfony/src/Symfony/Component/Debug/DebugClassLoader.php:169
Symfony\Component\Debug\DebugClassLoader->loadClass() at n/a:n/a
spl_autoload_call() at /var/www/html/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php:160
Doctrine\ORM\EntityManager->__construct() at /var/www/html/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php:850
Doctrine\ORM\EntityManager::create() at /var/www/html/app/cache/dev/appDevDebugProjectContainer.php:1711
appDevDebugProjectContainer->getDoctrine_Orm_DefaultEntityManagerService() at /var/www/html/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php:295
Symfony\Component\DependencyInjection\Container->get() at /var/www/html/vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/ManagerRegistry.php:35
Symfony\Bridge\Doctrine\ManagerRegistry->getService() at /var/www/html/vendor/doctrine/common/lib/Doctrine/Common/Persistence/AbstractManagerRegistry.php:183
Doctrine\Common\Persistence\AbstractManagerRegistry->getManager() at /var/www/html/app/cache/dev/appDevDebugProjectContainer.php:9401
appDevDebugProjectContainer->getFosUser_EntityManagerService() at /var/www/html/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php:295
Symfony\Component\DependencyInjection\Container->get() at /var/www/html/app/cache/dev/appDevDebugProjectContainer.php:2945
appDevDebugProjectContainer->getFosUser_UserManagerService() at /var/www/html/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php:295
Symfony\Component\DependencyInjection\Container->get() at /var/www/html/app/cache/dev/appDevDebugProjectContainer.php:9219
appDevDebugProjectContainer->getValidator_BuilderService() at /var/www/html/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php:295
Symfony\Component\DependencyInjection\Container->get() at /var/www/html/app/cache/dev/appDevDebugProjectContainer.php:9201
appDevDebugProjectContainer->getValidatorService() at /var/www/html/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php:295
Symfony\Component\DependencyInjection\Container->get() at /var/www/html/app/cache/dev/appDevDebugProjectContainer.php:8349
appDevDebugProjectContainer->getSonata_Adminbundle_Command_ExplainadmincommandService() at /var/www/html/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php:295
Symfony\Component\DependencyInjection\Container->get() at /var/www/html/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:147
Symfony\Bundle\FrameworkBundle\Console\Application->registerCommands() at /var/www/html/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:112
Symfony\Bundle\FrameworkBundle\Console\Application->all() at /var/www/html/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:66
Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /var/www/html/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:117
Symfony\Component\Console\Application->run() at /var/www/html/app/console:28
最佳答案
不再支持 Symfony 2.8,并且它尚未与 PHP 7.4 兼容(因为这是在 Symfony 2.8 的最后一次修复之后发布的)。您可以检查错误发生的具体位置并尝试修复它(通常完整的错误消息应包含此类信息),或者您也必须将 Symfony 2.8 更新到受支持的版本。
编辑:在您提供更多详细信息后,我假设您在 v2.5.14 中使用 doctrine/orm
。该版本于 2017 年 12 月发布,是与 Symfony 2.8 兼容的最新版本。由于 PHP 7.3(其中弃用了带有 switch
的 continue
为 introduced )于 2018 年 12 月发布,因此此类问题尚未在 PHP 7.3 中得到修复也就不足为奇了。 ORM 包。
您应该坚持使用 PHP 7.2,或者将 Symfony、Doctrine 以及您正在使用的任何 bundle 更新为最新版本。
关于php - Symfony 2.8 和 PHP 7.4 : Warning: "continue" targeting switch is equivalent to "break". Composer 是最新版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65091399/