Laravel调用Omnipay YooKassa提示Gateway类未找到报错
Omnipay YooKassa 类不存在问题排查方案
首先明确核心前提:vendor目录是Composer全权管理的依赖目录,手动往里面新增文件/目录不会被Composer的自动加载机制识别,所有第三方依赖必须通过Composer安装,不要手动修改vendor下的内容。
按以下步骤逐一排查修复:
- 清理无效手动文件
直接删除你手动创建的vendor/omnipay/yookassa目录,手动放在vendor里的内容不仅无法被自动加载,后续执行Composer更新操作时还会被直接覆盖,没有实际作用。 - 修正composer.json依赖配置
你当前的依赖配置存在两个明显问题:- 不存在
omnipay/yookassa这个官方扩展包,你写的"omnipay/yookassa": "*"属于无效依赖,Composer无法拉取对应代码,也不会生成对应的类加载映射 - 你同时安装了两个不同作者维护的YooKassa/YandexKassa Omnipay扩展,两个扩展的命名空间、网关调用名完全不同,容易产生冲突
如果你要调用的是\Omnipay\YooKassa\Gateway类,只需要保留"igor-tv/omnipay-yookassa": "^4.0"和官方SDK依赖"yoomoney/yookassa-sdk-php": "^2.4"即可,删掉无效的"omnipay/yookassa": "*"配置,其他重复的Kassa类扩展可以按需移除。
- 不存在
- 重新安装依赖并刷新自动加载
在项目根目录依次执行以下命令,清理无效依赖、安装正确的包并强制重建类加载映射:composer remove omnipay/yookassa composer update igor-tv/omnipay-yookassa composer dump-autoload -o - 验证类加载状态
执行完上述操作后,先运行以下代码验证类是否可以被正常识别:
返回结果为var_dump(class_exists(\Omnipay\YooKassa\Gateway::class));bool(true)就说明类加载正常,此时再执行$gateway = Omnipay::create('YooKassa');就不会触发类找不到的报错。
补充排查点:如果上述操作完成后依然报错,执行Laravel缓存清理命令即可,缓存的服务提供者、类加载映射会导致新安装的类无法被识别:
php artisan config:clear php artisan cache:clear
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

