如何修复Symfony Component\Runtime\ResolverInterface报错
学习Symfony框架开发控制器相关功能时突发致命错误,执行缓存清理操作后问题未解决,完整报错信息如下:
Fatal error(致命错误): Uncaught Error(未捕获错误): 在
/var/www/u1660023/data/www/site.ru/vendor/symfony/runtime/Resolver/ClosureResolver.php第19行中未找到接口Symfony\Component\Runtime\ResolverInterfaceStack trace(堆栈跟踪):
#0/var/www/u1660023/data/www/site.ru/vendor/composer/ClassLoader.php(571): include()
#1/var/www/u1660023/data/www/site.ru/vendor/composer/ClassLoader.php(428): Composer\Autoload\includeFile('/var/www/u16600...')
#2[internal function]: Composer\Autoload\ClassLoader->loadClass('Symfony\Compone...')
#3/var/www/u1660023/data/www/lift-invest.ru/vendor/symfony/runtime/GenericRuntime.php(20): class_exists('Symfony\Compone...')
#4/var/www/u1660023/data/www/site.ru/vendor/composer/ClassLoader.php(571): include('/var/www/u16600...')
#5/var/www/u1660023/data/www/site.ru/vendor/composer/ClassLoader.php(428): Composer\Autoload\includeFile('/var/www/u16600...')
#6/var/www/u1660023/data/www/site.ru/vendor/symfony/runtime/SymfonyRuntime.php(67): Composer\Autoload\ClassLoader->loadClass('Symfony\Compone...')
#7/var/www/u1660023/data/www/site.ru/vendor/composer/ClassLoader.php(571): include('/var/www/u16600...')
#8/var/www/u1660023/data/www/site.ru/vendor/composer/ClassLoader.php(428): Composer\Autoload\includeFile('/var/www/u16600...')
#9/var/www/u1660023/data/www/site.ru/vendor/autoload_runtime.php(16): Composer\Autoload\ClassLoader->loadClass('Symfony\Compone...')
#10/var/www/u1660023/data/www/site.ru/public/index.php(5): require_once('/var/www/u16600...')
#11{main}错误抛出位置:
/var/www/u1660023/data/www/site.ru/vendor/symfony/runtime/Resolver/ClosureResolver.php第 19 行
该错误属于Composer依赖加载异常,和框架缓存无关,因此清理缓存无法修复。核心触发原因有三类:
- vendor目录下symfony/runtime组件文件损坏、缺失,依赖更新过程被中断导致文件不完整
- 多站点部署时路径配置错误,出现不同项目的vendor目录交叉加载,从堆栈信息可看到存在跨站点路径(site.ru和lift-invest.ru)的文件引用
- Symfony各组件版本不匹配,单独升级某一个组件导致接口定义和调用逻辑不兼容
按顺序执行以下操作:
- 进入项目根目录,删除损坏的依赖目录和旧的依赖锁定文件:
rm -rf vendor/ composer.lock - 重新拉取匹配版本约束的所有项目依赖:
composer install - 若本地开发时曾单独升级过Symfony组件,校验所有Symfony相关包版本是否统一,避免版本差:
composer show symfony/* - 部署环境下检查站点根目录配置、软链接配置,修正跨项目引用vendor目录的错误配置
- 依赖重装完成后执行缓存清理命令:
php bin/console cache:clear
内容的提问来源于stack exchange,提问作者grisha_sychev

