Laravel7升级至10后报错:Target class [set_locale]不存在
解决Laravel 7升级到10后「Target class [set_locale] does not exist」错误
问题原因分析
从你提供的文件来看,这个错误主要由两个核心原因导致:
中间件文件名与类名不匹配
你提供的中间件文件名为SetLocal.php,但类定义是SetLocale。Laravel遵循PSR-4自动加载规范,要求类文件名必须和类名完全一致(Linux环境下还区分大小写),这直接导致框架无法找到对应的中间件类。升级后缓存未清理
Laravel升级后,旧的路由、配置或容器缓存可能没有更新,导致框架仍然使用过期的中间件映射关系。
解决步骤
1. 修正中间件文件名
将app/Http/Middleware/SetLocal.php重命名为SetLocale.php,确保文件名和类名完全一致(注意末尾的e)。
2. 清理Laravel缓存
运行以下命令清除所有缓存:
php artisan cache:clear php artisan route:clear php artisan config:clear
3. 验证中间件注册
确认app/Http/Kernel.php的$routeMiddleware数组中,set_locale的映射配置正确(你当前的配置是没问题的):
'set_locale' => \App\Http\Middleware\SetLocale::class,
4. Linux环境额外检查
如果部署在Linux服务器上,确保文件名大小写与类名严格一致(比如SetLocale.php而非setlocale.php),因为Linux文件系统区分大小写。
补充排查文件(若问题仍存在)
如果执行上述步骤后错误依旧,需要提供以下文件进一步定位问题:
composer.json:检查PSR-4自动加载规则是否正确配置composer dump-autoload命令的执行输出,确认自动加载映射是否更新
内容的提问来源于stack exchange,提问作者Kostya Khmylov
相关产品推荐
相关产品推荐

