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

Laravel 11控制器构造函数中如何配置方法认证?

Laravel 11 控制器构造函数中配置方法认证的写法

在Laravel 11中,你之前使用的构造函数绑定认证中间件的写法依然可以正常运行,代码无需修改:

public function __construct()
{
    $this->middleware('auth:sanctum')->except(['index', 'show']);
}

不过Laravel 11官方更推荐将中间件绑定逻辑移至路由层面,这样能让路由规则更集中,便于后续维护。以下是路由层面的实现方式:

假设你的控制器是App\Http\Controllers\ProductController,在routes/api.php中可以这样配置:

use App\Http\Controllers\ProductController;

// 无需认证的公开路由
Route::controller(ProductController::class)->group(function () {
    Route::get('/products', 'index');
    Route::get('/products/{product}', 'show');
});

// 需要Sanctum认证的私有路由
Route::controller(ProductController::class)
    ->middleware('auth:sanctum')
    ->group(function () {
        Route::post('/products', 'store');
        Route::put('/products/{product}', 'update');
        Route::delete('/products/{product}', 'destroy');
    });

或者你也可以用更紧凑的写法,通过except方法批量排除无需认证的路由:

Route::controller(ProductController::class)
    ->middleware('auth:sanctum')
    ->except(['index', 'show'])
    ->group(function () {
        Route::post('/products', 'store');
        Route::put('/products/{product}', 'update');
        Route::delete('/products/{product}', 'destroy');
    });

// 单独定义公开路由
Route::get('/products', [ProductController::class, 'index']);
Route::get('/products/{product}', [ProductController::class, 'show']);

这种路由层面的配置方式,能让你更清晰地看到哪些路由需要认证,哪些是公开访问的,符合Laravel 11推崇的"路由中心化"设计理念。

内容的提问来源于stack exchange,提问作者Bhushan Pagare

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 20:14:59