Laravel 9路由前缀报错:Target class [Admin\DashboardController]不存在
Laravel 9 路由前缀配置报错:
Target class [Admin\DashboardController] does not exist. 解决方法 问题原因
Laravel 9 已移除路由中的namespace()方法,该写法在Laravel 8+已被弃用,直接使用会导致框架无法正确解析控制器的完整命名空间。
解决方案
方案一:使用完整类名指定控制器
修改routes/web.php中的路由代码,直接传入控制器的完整类名:
Route::prefix('admin')->group(function(){ Route::get('/', [\App\Http\Controllers\Admin\DashboardController::class, 'index'])->name('dashboard'); });
方案二:配置默认命名空间(适配习惯短类名的场景)
- 打开
app/Providers/RouteServiceProvider.php,找到$namespace属性,取消注释并设置为App\Http\Controllers:
protected $namespace = 'App\Http\Controllers';
- 确保
mapWebRoutes()方法中路由组使用了该命名空间:
$this->routes(function () { Route::middleware('web') ->namespace($this->namespace) ->group(base_path('routes/web.php')); });
- 之后即可继续使用短类名写法:
Route::prefix('admin')->group(function(){ Route::get('/','Admin\DashboardController@index')->name('dashboard'); });
额外验证点
- 确认控制器文件路径为
App/Http/Controllers/Admin/DashboardController.php,文件名与类名大小写一致(Linux系统严格区分大小写) - 控制器内的命名空间
namespace App\Http\Controllers\Admin;书写正确
内容的提问来源于stack exchange,提问作者Rizal Maulana
相关产品推荐
相关产品推荐

