Magento 2.2.4执行setup:di:compile报错:VirtualLogger源类不存在
setup:di:compile 时的VirtualLogger生成错误 你遇到的这个[RuntimeException] Source class "\Magento\Payment\Model\Method\Virtual" for "Magento\Payment\Model\Method\VirtualLogger" generation does not exist错误,多半是核心文件缺失、依赖异常或者模块冲突搞出来的,我给你几个靠谱的排查方案:
1. 先确认核心Payment模块文件是否完整
首先去检查Magento\Payment\Model\Method\Virtual这个类的文件在不在,路径是:vendor/magento/module-payment/Model/Method/Virtual.php
- 如果文件找不到,说明Composer安装时这个模块的文件损坏或者漏装了,执行下面的命令重装依赖:
要是只想单独修复这个模块,也可以这么搞:composer install --no-devcomposer require magento/module-payment:2.2.4 --no-update composer update magento/module-payment
2. 排查第三方/自定义模块的冲突
有些第三方支付模块可能会重写或者错误引用Virtual类,导致编译时卡壳:
- 先把所有第三方模块禁用掉,执行这条命令:
php bin/magento module:disable $(php bin/magento module:status | grep -v Magento | grep -v List | grep -v None) - 然后再试一次编译:
php bin/magento setup:di:compile - 如果这次编译成功了,就逐个重新启用第三方模块,每次启用后都跑一遍编译,找到那个搞事情的模块,要么联系开发者修,要么自己检查它的重写配置是不是写错了。
3. 修复文件权限
有时候权限不对会导致Magento读不到核心文件,执行下面的命令把权限设对(假设你的Web服务器用户是www-data,不是的话换成你自己的):
sudo chown -R www-data:www-data . find . -type f -exec chmod 644 {} \; find . -type d -exec chmod 755 {} \; chmod u+x bin/magento
4. 刷新Composer自动加载
自动加载文件出问题也会导致类找不到,先执行这个:
composer dump-autoload -o
然后再清理一遍缓存和生成目录(你之前已经做过,但再跑一遍更稳妥):
rm -rf var/di/* var/generation/* var/cache/* var/log/* var/page_cache/* var/session/* var/view_preprocessed/* pub/static/* php bin/magento cache:flush
之后再试编译。
5. 检查自定义的VirtualLogger类
如果你的项目里有自己写的Magento\Payment\Model\Method\VirtualLogger类,仔细检查它的父类引用,确保extends的是\Magento\Payment\Model\Method\Virtual,别写错路径了。
按照上面的步骤走,基本能搞定这个问题。要是还不行,就试试重新下载Magento 2.2.4的安装包,替换vendor目录下的magento核心文件,再重新编译。
内容的提问来源于stack exchange,提问作者nb171994

