Laravel点击管理按钮提示PagesController类不存在如何修复
问题原因
错误提示中目标类名App\Http\Controllers\App\Http\Controllers\Admin\PagesController出现了两次App\Http\Controllers前缀,属于Laravel路由解析时重复拼接命名空间导致的类不存在问题,对应解决方案如下:
解决方案
1. 路由命名空间冲突修复(二选一即可)
Laravel 8及以上版本默认关闭了路由服务提供者的全局命名空间前缀,如果你手动开启了该配置,同时在路由中写了控制器完整命名空间,就会出现前缀重复拼接的问题:
- 方案A(保留全局命名空间前缀)
打开app/Providers/RouteServiceProvider.php,确认$namespace属性值为App\Http\Controllers且未被注释,然后修改web.php代码:
首先在web.php顶部引入控制器:
然后修改路由定义,去掉完整命名空间前缀:use App\Http\Controllers\Admin\PagesController; use App\Http\Controllers\Admin\UsersController; use App\Http\Controllers\HomeController;
同时删除重复的Route::resource('/admin/pages', PagesController::class, ['except' => ['show']]); Route::resource('/admin/users', UsersController::class, ['except' => ['create','store','show']]); Route::get('/home', [HomeController::class, 'index'])->name('home');/home路由定义。 - 方案B(使用Laravel 8+默认路由写法)
打开app/Providers/RouteServiceProvider.php,注释掉$namespace属性的定义,不需要修改你现有的pages、users资源路由,只需要把/home路由改成完整类名写法即可:
同样删除重复的Route::get('/home', [\App\Http\Controllers\HomeController::class, 'index'])->name('home');/home路由定义。
2. 控制器文件路径校验
确认PagesController.php文件存放路径为app/Http/Controllers/Admin/,文件名大小写与类名完全一致(Linux环境对大小写敏感,避免出现文件名小写、类名大写的情况)。
内容的提问来源于stack exchange,提问作者Bekiwe Simelane
相关产品推荐
相关产品推荐

