Laravel 5.8 Cashier Webhook报类名需为有效对象或字符串错误如何解决
Laravel 5.8 Cashier Stripe webhook报错解决方案
报错Class name must be a valid object or a string的核心原因是Cashier读取到的账单主体模型配置项cashier.model为空、格式无效,修改vendor源码属于硬编码绕过配置逻辑,不符合开发规范,正确修复步骤如下:
修复步骤
- 发布Cashier官方配置文件(如果未发布过)
执行Artisan命令:
执行完成后会生成php artisan vendor:publish --tag=cashier-configconfig/cashier.php配置文件。- 发布Cashier官方配置文件(如果未发布过)
- 验证配置文件的model项取值
打开config/cashier.php,找到model配置项,确保取值为你的账单主体模型的完整类名,默认用User模型的示例如下:
如果你修改过User模型的命名空间(比如放到了'model' => App\User::class,App\Models目录下),则对应改为App\Models\User::class即可。注意:如果你自行修改了该项,用
env()辅助函数读取.env变量,比如写成'model' => env('CASHIER_MODEL', App\User::class),则需要检查.env文件中的CASHIER_MODEL取值是否为正确的类名字符串,不要加::class后缀:# 正确写法 CASHIER_MODEL=App\User # 错误写法 CASHIER_MODEL=App\User::class- 验证配置文件的model项取值
- 重新生成配置缓存
执行以下命令清除旧缓存、加载最新配置:
php artisan config:clear php artisan cache:clear # 生产环境如果开启了配置缓存,需要重新生成 php artisan config:cache- 重新生成配置缓存
- 验证配置加载是否正常(可选)
可以临时添加测试路由验证配置是否正确读取:
访问该路由如果输出正确的类名字符串,说明配置加载正常,webhook即可正常运行。Route::get('/test-cashier-config', function () { dd(config('cashier.model')); });- 验证配置加载是否正常(可选)
内容的提问来源于stack exchange,提问作者sparky1815
相关产品推荐
相关产品推荐

