You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:18:26