Symfony 4.4升级5.0执行cache:clear报类不存在故障排查
问题背景
在将项目从Symfony 4.4升级至5.0版本时遇到缓存错误,项目在Symfony 4.4版本下cache:clear命令可正常运行。
环境信息
- 升级操作执行时PHP版本为7.2.5,升级前项目运行PHP版本为7.1
已执行操作
- 升级前严格参照Symfony官方4.4升5.0大版本升级文档操作
- 已修复所有代码中的废弃用法提示
- 执行命令
composer require --dev symfony/phpunit-bridge安装对应组件 - 执行
./bin/phpunit运行测试并修复了绝大多数兼容问题,仅剩余1条Composer依赖解析相关报错,栈追踪信息如下:
Stack trace: #0 [internal function]: array_merge(phpunit/phpunit: Array) #1 phar:///usr/local/bin/composer.phar/src/Composer/DependencyResolver/DefaultPolicy.php(84): call_user_func_array('array_merge', Array) #2 phar:///usr/local/bin/composer.phar/src/Composer/Command/ShowCommand.php(537): Composer\DependencyResolver\DefaultPolicy->selectPreferredPackages(Object(Composer\DependencyResolver\Pool), Array, Array)
当前报错现象
执行composer update "symfony/*"命令时,依赖更新流程全部正常,仅最后执行post-update-cmd钩子中的cache:clear脚本时报错,返回错误码1,完整报错日志如下:
Executing script cache:clear [KO] [KO] Script cache:clear returned with error code 1 !! !! // Clearing the cache for the dev environment with debug !! // true !! !! !! In FileLoader.php line 173: !! !! Class "1\AdminController" does not exist in /Applications/MAMP/htdocs/MyApplication/config/routes/../../src/Controller/ (which is being imported from "/Applications/MAMP/htdocs/MyApplication/config/routes/annotations.yaml"). Make sure annotations are installed and enabled. !! !! !! In AnnotationDirectoryLoader.php line 62: !! !! Class "1\AdminController" does not exist !! !! !! cache:clear [--no-warmup] [--no-optional-warmers] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--] <command> !! !! Script @auto-scripts was called via post-update-cmd
已排查信息
- 项目中不存在路径为1/AdminController的文件,AdminController是
src/Controller/Admin/目录下的首个控制器 - 若修改annotations.yaml中的路由资源指向为/HomeController,会出现同类型报错,仅报错类名变为
1\HomeController - 当前annotations.yaml配置内容如下:
controllers resource: ../../src/Controller/ type: annotation kernel: resource: ../../src/Kernel.php type: annotation
- 执行
composer self-update升级Composer版本后问题未解决 - 项目composer.json完整配置如下:
"type": "project", "license": "proprietary", "require": { "php": "^7.2.5", "ext-ctype": "*", "ext-iconv": "*", "composer/package-versions-deprecated": "1.11.99.5", "doctrine/annotations": "^1.8", "doctrine/common": "^2", "doctrine/doctrine-bundle": "^2", "doctrine/doctrine-migrations-bundle": "^2", "doctrine/orm": "^2", "dompdf/dompdf": "^0.8.5", "phpdocumentor/reflection-docblock": "^4.3", "sensio/framework-extra-bundle": "^5.1", "symfony/apache-pack": "^1.0", "symfony/asset": "^5.0", "symfony/cache": "5.0.*", "symfony/config": "5.0.*", "symfony/console": "5.0.*", "symfony/dotenv": "^5.0", "symfony/error-handler": "^5.0", "symfony/event-dispatcher": "^5.0", "symfony/expression-language": "^5.0", "symfony/flex": "^1.3.1", "symfony/form": "^5.0", "symfony/framework-bundle": "^5.0", "symfony/http-client": "^5.0", "symfony/http-foundation": "^5.0", "symfony/http-kernel": "^5.0", "symfony/intl": "^5.0", "symfony/mailer": "^5.0", "symfony/monolog-bundle": "^3.1", "symfony/process": "^5.0", "symfony/property-access": "^5.0", "symfony/property-info": "^5.0", "symfony/security-bundle": "^5.0", "symfony/security-core": "^5.0", "symfony/security-guard": "^5.0", "symfony/security-http": "^5.0", "symfony/serializer": "^5.0", "symfony/translation": "^5.0", "symfony/twig-bundle": "^5.0", "symfony/validator": "^5.0", "symfony/web-link": "^5.0", "symfony/yaml": "^5.0", "twbs/bootstrap": "4.4.1", "twig/extra-bundle": "^2.12|^3.0", "twig/twig": "^2.12|^3.0" }, "require-dev": { "doctrine/doctrine-fixtures-bundle": "^3.4.2", "fzaninotto/faker": "^1.9", "phpunit/phpunit": "^7.5", "symfony/browser-kit": "^5.0", "symfony/css-selector": "^5.0", "symfony/debug-bundle": "^5.0", "symfony/maker-bundle": "^1.14", "symfony/phpunit-bridge": "^6.1", "symfony/stopwatch": "^5.0", "symfony/web-profiler-bundle": "^5.0" }, "config": { "preferred-install": { "*": "dist" }, "platform": { "php": "7.2.5" }, "sort-packages": true, "allow-plugins": { "ocramius/package-versions": true, "symfony/flex": true } }, "autoload": { "psr-4": { "App\\": "src/" } }, "autoload-dev": { "psr-4": { "App\\Tests\\": "tests/" } }, "replace": { "paragonie/random_compat": "2.*", "symfony/polyfill-ctype": "*", "symfony/polyfill-iconv": "*", "symfony/polyfill-php71": "*", "symfony/polyfill-php70": "*", "symfony/polyfill-php56": "*" }, "scripts": { "auto-scripts": { "cache:clear": "symfony-cmd", "assets:install %PUBLIC_DIR%": "symfony-cmd" }, "post-install-cmd": [ "@auto-scripts" ], "post-update-cmd": [ "@auto-scripts" ] }, "conflict": { "symfony/symfony": "*" }, "extra": { "symfony": { "allow-contrib": false, "require": "5.0.*" } } }
内容的提问来源于stack exchange,提问作者Bastien SCHRODER
相关产品推荐
相关产品推荐

