我想在 web.php 文件中提及的最后一个主题是路由组。考虑到还没有触及 api.php 也经常使用的文件,还没有完全讨论完路由。 将中间件应用于组 要将中间件应用于特
我想在web.php
文件中提及的最后一个主题是路由组。考虑到还没有触及api.php
也经常使用的文件,还没有完全讨论完路由。
将中间件应用于组
要将中间件应用于特定组,您只需使用该Route::middleware
方法,添加要应用的特定中间件,链接到一个group
方法并传递一个匿名函数,其中包含应该应用中间件的各种路由。
在上一篇文章中看到了将中间件应用于组的示例。
Route::middleware(['throttle:web'])->group(function () {
Route::get('/throttle-test-1', function() {
return "Throttle Test 1";
});
Route::get('/throttle-test-2', function() {
return "Throttle Test 2";
});
});
如果想将额外的应用middleware
到组中,只需将额外的项目添加到middleware
数组中。例如,假设auth
也想追加。
Route :: middleware ([ 'throttle:web' , 'auth' ])-> group ( function ( ) {
Route :: get ( '/throttle-test-3' , function ( ) {
return "Throttle Test 3" ;
});
Route :: get ( '/throttle-test-4' , function ( ) {
return "Throttle Test 4" ;
});
});
如果现在访问任何一条路由,都会收到错误消息,因为还没有实现身份验证。但是,确实看到中间件正在运行。它正在寻找login
中的路线app/Http/Middleware/Authenticate.php
。
中间件是按顺序执行的,也就是说对于[‘throttle:web’, ‘auth’]
,throttle:web
中间件会先执行,然后是auth
。
控制器
您可能还记得汽车项目中的以下示例:
Route::prefix('/personalcars')->group(function() {
Route::get('/', [PersonalCarController::class, 'index']);
Route::get('/create', [PersonalCarController::class, 'create']);
Route::post('/', [PersonalCarController::class, 'store']);
Route::get('/{id}', [PersonalCarController::class, 'show']);
Route::get('/{id}/edit', [PersonalCarController::class, 'edit']);
Route::put('/{id}', [PersonalCarController::class, 'update']);
Route::delete('/{id}', [PersonalCarController::class, 'destroy']);
});
对于每条路由,了PersonalCarController::class
. 这似乎是一大堆重复。可以从那里抽出PersonalCarController
课程并将其应用于整个小组。
Route::controller(PersonalCarController::class)->group(function () {
Route::get('/', 'index');
Route::get('/create', 'create');
Route::post('/', 'store');
Route::get('/{id}', 'show');
Route::get('/{id}/edit', 'edit');
Route::put('/{id}', 'update');
Route::delete('/{id}', 'destroy');
});
这看起来干净多了。在这种情况下,如果我们需要修改控制器名称,我们只需在一个地方进行即可。
这就是路线。接下来我们将进入一些额外的 Laravel 概念。我们肯定会很快重新访问中间件。