📜  Laravel-中间件(1)

📅  最后修改于: 2023-12-03 15:02:39.219000             🧑  作者: Mango

Laravel 中间件

在 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 路由中使用 auththrottle 中间件,可以创建一个中间件组:

protected $middlewareGroups = [
    'api' => [
        'throttle:60,1',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
];

然后,只需将 $middlewareGroups 数组中的中间件组名称用作路由定义的一部分即可:

Route::middleware('api')->group(function () {
    // ...
});
结语

Laravel 中的中间件简化了 Web 开发的许多任务,并允许开发者编写可重用的代码。中间件让开发者能够更好地管理 HTTP 请求,从而在应用程序中实现更好的可靠性和安全性。