Magento 2.4.7与Braintree核心模块编译错误求助(PHP8.1/8.2)
解决Magento 2.4.7在PHP8.1/8.2下的编译错误问题
问题根源
报错的核心原因是paypal/module-braintree-core插件代码使用了独立null返回类型,该语法在PHP8.1中虽已支持,但部分环境或旧版本模块存在兼容性问题;PHP8.3对该语法支持更完善,因此切换后无报错。即便你禁用了相关模块,仍可能存在模块禁用未生效、缓存残留或隐性依赖的情况。
解决方案
1. 临时修改报错代码(快速修复)
直接调整报错文件的返回类型,适配PHP8.1/8.2的语法要求:
- 打开文件
/servername/vendor/paypal/module-braintree-core/Plugin/DeleteStoredPaymentPlugin.php - 定位到第57行代码:
): null { - 将其修改为以下兼容写法之一:
或// 写法1:方法无返回值时推荐使用void类型 ): void {// 写法2:兼容可能返回null的场景,使用可空void类型 ): ?void { - 重新执行编译命令:
php bin/magento setup:di:compile
2. 确保Braintree模块完全禁用
若修改代码不是长期方案,需彻底禁用相关模块并清理残留:
- 强制禁用核心Braintree模块:
php bin/magento module:disable PayPal_Braintree PayPal_BraintreeCore --clear-static-content - 更新模块配置并清理缓存:
php bin/magento setup:upgrade php bin/magento cache:flush - 再次执行编译:
php bin/magento setup:di:compile - 验证模块状态:
确认输出为php bin/magento module:status PayPal_BraintreeDisabled即可。
3. 升级Braintree模块至兼容版本
通过Composer升级模块,获取适配PHP8.1/8.2的版本:
composer update paypal/module-braintree-core paypal/module-braintree --with-all-dependencies
升级完成后重新执行编译命令。
4. 恢复网站访问
若编译完成后网站仍无法访问,执行以下命令重置环境:
# 切换到开发者模式便于排查问题 php bin/magento deploy:mode:set developer # 清理静态文件和缓存 php bin/magento cache:clean php bin/magento setup:static-content:deploy -f
内容的提问来源于stack exchange,提问作者Mike L-SJC
相关产品推荐
相关产品推荐

