升级TYPO3至v12后执行typo3 extension:setup报错求助
TYPO3 v11升级v12:ProviderConfigurationLoader构造函数参数异常解决方案
问题原因
TYPO3 v12对依赖注入(DI)机制做了严格规范,TYPO3\CMS\Core\ExpressionLanguage\ProviderConfigurationLoader类必须通过DI容器注入所需的3个参数,不能再用GeneralUtility::makeInstance()无参数实例化。这个问题通常是自定义扩展或第三方扩展未适配v12的DI变更,仍在使用旧的实例化方式导致的。
排查步骤
- 查看完整报错堆栈,定位是哪个扩展的代码调用了
GeneralUtility::makeInstance(ProviderConfigurationLoader::class) - 检查所有自定义扩展代码,搜索是否存在直接实例化
ProviderConfigurationLoader的逻辑 - 排查第三方扩展:确认使用的扩展是否已发布适配TYPO3 v12的版本,尤其是涉及表达式语言配置的扩展
修复方案
1. 修复自定义扩展代码
如果是自有扩展的问题,将直接实例化逻辑替换为依赖注入:
use TYPO3\CMS\Core\ExpressionLanguage\ProviderConfigurationLoader; class YourCustomClass { public function __construct( protected ProviderConfigurationLoader $providerConfigurationLoader ) {} // 后续直接通过$this->providerConfigurationLoader调用方法即可 }
确保扩展的Services.yaml(如果存在)配置正确,TYPO3 v12默认支持构造函数自动注入,无需额外配置。
2. 更新或禁用第三方扩展
- 运行
ddev composer show <扩展包名>查看当前版本,确认是否有v12兼容版本 - 若有兼容版本,更新composer.json中的版本约束后执行
ddev composer update <扩展包名> - 若无兼容版本,可暂时禁用该扩展(通过
config/system/additional.php或后台扩展管理),待兼容版本发布后再启用
3. 彻底清除缓存
除TYPO3 CLI清除缓存外,执行以下命令确保缓存完全清理:
ddev exec rm -rf var/cache/ ddev exec rm -rf var/transient/ ddev composer dump-autoload
额外检查
- 确认composer.json中TYPO3核心版本约束正确,所有依赖扩展均适配v12
- 对比同事本地环境,检查是否有未同步的配置文件(如
config/system/settings.php、Services.yaml等)
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

