Laravel 11如何为Web/API路由设置控制器默认命名空间?
在Laravel 11中设置路由默认控制器命名空间
Laravel 11移除了传统的RouteServiceProvider,路由配置统一移至bootstrap/app.php文件。要实现旧版本中为Web、API路由分别设置默认控制器命名空间的效果,只需修改withRouting的配置方式,改用闭包来定义路由分组:
return Application::configure(basePath: dirname(__DIR__)) ->withRouting(function () { // 配置Web路由,默认命名空间为App\Http\Controllers Route::middleware('web') ->namespace('App\Http\Controllers') ->group(base_path('routes/web.php')); // 配置API路由,默认命名空间为App\Http\Controllers\Api Route::prefix('api') ->middleware('api') ->namespace('App\Http\Controllers\Api') ->group(base_path('routes/api.php')); // 加载控制台路由 Route::commands(base_path('routes/console.php')); // 配置健康检查路由 Route::get('/up', fn () => response('OK')); }) ->withMiddleware(function (Middleware $middleware) { // 中间件配置 }) ->withExceptions(function (Exceptions $exceptions) { // 异常处理配置 })->create();
配置完成后,你就可以像旧版本一样在路由文件中简化写法:
- 在
routes/web.php中直接写:Route::post('login', 'AuthController@login');,框架会自动匹配App\Http\Controllers\AuthController类的login方法 - 在
routes/api.php中直接写:Route::get('users', 'UserController@index');,框架会自动匹配App\Http\Controllers\Api\UserController类的index方法
另外,如果你只是想在单个路由文件内局部设置命名空间,也可以在路由文件里使用分组:
// routes/web.php Route::group(['namespace' => 'App\Http\Controllers'], function() { Route::post('login', 'AuthController@login'); });
但上述闭包配置的方式更贴近旧版本RouteServiceProvider的全局统一管理逻辑,适合需要批量设置的场景。
内容的提问来源于stack exchange,提问作者eylay
相关产品推荐
相关产品推荐

