中间件

7.1介绍

中间件提供了一种方便的机制来过滤进入应用程序的HTTP请求。例如,Laravel包含一个验证用户身份的中间件。如果用户未能通过认证,中间件会把用户重定向到登录页面。反之,用户如果通过验证,中间件将把请求进—步转发到应用程序中。
当然,除了验证身份外,还可以编写其他的中间件来执行各种任务。例如:CORS中间件可以负责为所有的应用返回的responses添加合适的响应头。日志中间件可以记录所有传入应用的请求。
Laravel自带了一些中间件,包括身份验证、CSRF 保护等。所有的这些中间件都位于app/Http/Middleware目录。

7.2定义中间件

  1. //生成的文件位于app/http/middleware下
  2. php artisan make:middleware CheckLogin

7.3 注册中间件(路由分配中间件)

7.3.1全局中间件

如果你希望中间件在应用处理每个HTTP请求期间都运行,只需要在
app/Http/Kernel.php中的$middleware 属性中列出这个中间件。
●全局中间件对所有路由生效,所以用途并不广泛
image.png

7.3.2为单个路由配置单个中间件

1.修改app/Http/Kernel.php文件中,添加合适代码(示例代码可以起别名)
7.中间件 - 图2
2.使用middleware( )方法将中间件分配给路由:
image.png
注意:使用middleware( )方法也可以为同一个路由分配多个中间件,只需要传入多个参数即可,当然。如果一个路由具有多个中间件,我们更推荐使用中间件组的方式进行配置

  1. Route::get('index', function () {
  2. //
  3. })->middleware('cl','ca');

7.3.3 为路由群组配置单个中间件

image.png
注意:
- 如果需要阻止某个单个路由配置中间件需要withoutMiddleware( )方法
- withoutMiddleware( )方法只能删除路由中间件,不适用于全局中间件

7.3.4 中间件组

为路由群组配置中间件组
如果你要为你的路由分配多个中间件的话,可以把这些需要分配的中间件放到一个组中然后直接把这个分组分配给路由群组即可
1.修改Kernel.php

protected $middlewareGroups = [
     'myweb'=>[
        \App\Http\Middleware\CheckLogin::class,
     ],

2.修改路由文件

Route::group(["prefix"=>"admin","middleware"=>["myweb"]],
function(){
    Route::get("index","DayThreeController@index")->withoutMiddleware([CheckLogin::class]);
    Route::get("up","DayThreeController@up");

});

路由文件中:
image.png
配置文件:
image.png