首页 > 解决方案 > 如何将中间件部分分配给 Laravel 资源路由?

问题描述

如何将身份验证中间件分配给部分资源路由?

此代码是帖子的资源路径

Route::apiResource('posts', PostController::class);

可以解释如下

Route::get('posts', [PostController::class, 'index']);
Route::get('posts/create', [PostController::class, 'create']);
Route::get('posts/{id}', [PostController::class, 'show']);
Route::get('posts/{id}/edit', [PostController::class, 'edit']);
Route::post('posts', [PostController::class, 'store']);
Route::put('posts/{id}', [PostController::class, 'update']);
Route::delete('posts/{id}', [PostController::class, 'destroy']);

我只想将 auth 中间件分配给destroy方法 or store,update等。

有什么方法可以坚持,Route::apiResource('posts', PostController::class);但部分路由分配了身份验证中间件?

标签: laravel

解决方案


您可以通过在您middleware的方法中调用方法__construct()来完成PostController

仅使用 ... 方法绑定中间件:

public function __construct()
{
    $this->middleware('auth')
        ->only([
            'destroy',
            'store',
            'update',
        ]);
}

或绑定到除 ... 之外的所有方法:

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

推荐阅读