使用通用中间件对 Laravel 8 路由进行分组

Group Laravel 8 routes with common middleware

我想问一下在laravel 8中如何使用身份验证是否正确?

我想制作只对登录用户可见的网站。

我的解决方案在这里。但我想知道我是否会有更多路线,有什么方法可以用一个命令完成,而不需要为每条路线添加吗?

Route::get('/', [PagesController::class,'index'])
    ->middleware('auth');

Route::get('edit/{id}', [PagesController::class,'editPage'])
    ->middleware('auth')
    ->where('id', '[0-9]+');

Route::post('edit/{id}', [PagesController::class,'editItem'])
    ->middleware('auth')
    ->where('id', '[0-9]+');

Route::get('delete/{id}', [PagesController::class,'deletePage'])
    ->middleware('auth')
    ->where('id', '[0-9]+');

Route::post('delete/{id}', [PagesController::class,'deleteItem'])
    ->middleware('auth')
    ->where('id', '[0-9]+');

require __DIR__.'/auth.php';

谢谢

您可以使用路由组,Laravel的文档在这里; https://laravel.com/docs/8.x/routing#route-group-middleware

您的示例可以更新为:

Route::middleware(['auth'])->group(function () {
    Route::get('/', [PagesController::class,'index']);

    Route::get('edit/{id}', [PagesController::class,'editPage'])
        ->where('id', '[0-9]+');

    Route::post('edit/{id}', [PagesController::class,'editItem']);
        ->where('id', '[0-9]+');

    Route::get('delete/{id}', [PagesController::class,'deletePage'])
        ->where('id', '[0-9]+');

    Route::post('delete/{id}', [PagesController::class,'deleteItem'])
        ->where('id', '[0-9]+');
});

您可以更进一步,使用 Global Constraints 在全球范围内将 id 定义为 [0-9]+,而不是每条路线。

App\Providers\RouteServiceProvider定义

public function boot()
{
    Route::pattern('id', '[0-9]+');
}

一旦定义了模式,它就会自动应用到所有使用该参数名称的路由:

Route::get('/user/{id}', function ($id) {
    // Only executed if {id} is numeric...
});

你可以用中间件创建路由组('auth')

Route::middleware(['auth'])->group(function () {
//all of your routes
}