Laravel部署至共享主机后出现IsAdmin中间件不存在错误求助
问题描述
我近期从原生PHP转用Laravel,本地完成的项目所有功能正常,但部署到共享主机后遇到中间件报错:
Target class [App\Http\Middleware\IsAdmin] does not exist.
相关配置信息
- 中间件注册(
app/Http/Kernel.php):
'isAdmin' => \App\Http\Middleware\IsAdmin::class,
IsAdmin中间件代码(app/Http/Middleware/IsAdmin.php):
<?php namespace App\Http\Middleware; use App\Models\User; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class isAdmin { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse */ public function handle(Request $request, Closure $next) { if (Auth::user() && Auth::user()->isAdmin == 1) { return $next($request); } return redirect('/'); } }
- 路由组配置:
Route::group(['middleware' => 'isAdmin'], function () { // 使用该中间件的路由 });
额外情况:服务器PHP版本低于8.0.2,无法运行artisan命令。
解决方案
1. 修正文件名大小写
多数共享主机使用Linux系统,文件名区分大小写,而本地Windows/macOS通常不区分。你代码里的类名是isAdmin(小写首字母),但注册时写的是IsAdmin,必须让文件名和类名严格匹配:
- 把服务器上的中间件文件名从
isAdmin.php改为IsAdmin.php(首字母大写)。
2. 手动补全类映射
因为服务器PHP版本不够无法运行Composer或artisan命令,手动处理自动加载:
- 打开服务器上的
vendor/composer/autoload_classmap.php文件,检查是否有App\Http\Middleware\IsAdmin的条目。如果没有,手动添加一行:'App\\Http\\Middleware\\IsAdmin' => $baseDir . '/app/Http/Middleware/IsAdmin.php', - 删除
bootstrap/cache目录下的所有缓存文件(比如packages.php、services.php、routes.php),避免缓存导致的加载问题。
3. 检查文件上传完整性
确认服务器app/Http/Middleware/目录下确实存在IsAdmin.php文件,且内容和本地完全一致,没有上传丢失或损坏的情况。
4. 处理PHP版本兼容问题
Laravel 9及以上版本要求PHP 8.0.2+,服务器版本不达标会引发更多问题:
- 联系主机商升级PHP版本到符合要求的版本;
- 若无法升级,可将本地项目降级到Laravel 8(支持PHP 7.3+),重新部署。
内容的提问来源于stack exchange,提问作者DigitalBraine
相关产品推荐
相关产品推荐

