📅  最后修改于: 2023-12-03 15:02:39.219000             🧑  作者: Mango
在 Laravel 中,中间件提供了一种方便的机制来过滤 HTTP 请求。中间件可以用于验证用户的身份、处理授权逻辑,甚至可以修改 HTTP 请求或响应。
创建自定义中间件十分简单,只需要运行以下 Artisan 命令就可以了:
php artisan make:middleware MyMiddleware
这会在 app/Http/Middleware
目录下创建一个新的中间件类,名为 MyMiddleware
。这个类应该包含一个 handle
方法,这个方法会在中间件被执行时调用。
为了在应用程序中使用中间件,需要将其注册。在 app/Http/Kernel.php
文件的 $middleware
属性中,可以找到应用程序的全局中间件栈。这个数组中包含所有的中间件类。
同时,在 $routeMiddleware
属性中,可以找到每个中间件的简称及其对应的类。
例如,如果要将 MyMiddleware
注册为全局中间件,只需在 $middleware
数组中添加以下行:
protected $middleware = [
// ...
\App\Http\Middleware\MyMiddleware::class,
];
如果想在路由中使用这个中间件,可以将它作为路由定义的一部分使用:
Route::get('/', function () {
// ...
})->middleware('MyMiddleware');
或者,也可以在路由中间件组中使用:
Route::group(['middleware' => ['MyMiddleware']], function () {
// ...
});
Laravel 提供了一些预定义的中间件,这些中间件可以让开发者更轻松地实现某些任务。
一些最常见的使用到的中间件包括:
auth
:授权中间件,用于验证用户是否已通过身份验证。如果用户未通过身份验证,则会将其重定向到登录页面。throttle
:限制中间件,用于限制单个用户请求的速度(通常用于 API)。guest
:授权中间件,用于验证用户未通过身份验证。如果用户已通过身份验证,则会将其重定向到主页。cors
:CORS 中间件,用于解决跨域资源共享问题。Laravel 还提供了中间件栈的概念,允许将一组中间件按顺序组合在一起。
例如,如果想要在所有 API 路由中使用 auth
和 throttle
中间件,可以创建一个中间件组:
protected $middlewareGroups = [
'api' => [
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
然后,只需将 $middlewareGroups
数组中的中间件组名称用作路由定义的一部分即可:
Route::middleware('api')->group(function () {
// ...
});
Laravel 中的中间件简化了 Web 开发的许多任务,并允许开发者编写可重用的代码。中间件让开发者能够更好地管理 HTTP 请求,从而在应用程序中实现更好的可靠性和安全性。