简介

中间件跟 房产中介 起的作用差不多,中间件提供了一种方便的机制过滤进入应用程序的 HTTP 请求。例如,Laravel 包含一个验证用户身份的中间件。 如果用户未能通过认证,中间件会把用户重定向到登录页面。 反之,用户如果通过验证, 中间件将把请求进一步转发到应用程序中。

将中间件想象成一系列层次, HTTP 请求必须通过它们才能进入你的应用层。每一层都会检查请求(是否符合中间件要求),而后决定通过或拒绝访问应用。

Laravel 自带了一些中间件,包括身份验证、CSRF 保护等。所有的这些中间件都位于 app/Http/Middleware 目录。

创建中间件

使用 artisan 的 make:middleware 创建:

  1. php artisan make:middleware AdminLogitCheck

创建后在 app/Http/Middlewar 目录下。

定义中间件

  1. public function handle($request, Closure $next)
  2. {
  3. // 在这里执行任务
  4. return $next($request);
  5. }

前置和后置中间件

中间件是在请求前执行还是请求后执行,取决于中间件本身的定义,在处理之前执行的为「前置中间件」,在处理之后执行的叫「后置中间件」

  1. 前置中间件

    1. public function handle($request, Closure $next)
    2. {
    3. // 执行一些任务
    4. return $next($request);
    5. }
  2. 后置中间件

    1. public function handle($request, Closure $next)
    2. {
    3. $response = $next($request);
    4. // 执行一些任务
    5. return $response;
    6. }

注册中间件

  1. 全局中间件

app / Http / Kernel.php 中的 $middleware 属性中列出这个中间件

  1. 路由中间件

app / Http / Kernel.php 中的 $routeMiddleware 属性中列出这个中间件

  1. // 在 App\Http\Kernel 类中...
  2. protected $routeMiddleware = [
  3. 'auth' => \App\Http\Middleware\Authenticate::class,
  4. 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
  5. ];

使用「路由」中间件

HTTP 内中定义好了中间件,就可以通过 middleware 方法为路由分配中间件:

  1. Route::get('admin/profile', function () {
  2. //
  3. })->middleware('auth');

也可以为路由分配多个中间件

  1. Route::get('/', function () {
  2. //
  3. })->middleware('first', 'second');

中间件群组

即中间件的路由分组

中间件组可以使用与单个中间件相同的语法将自身分配给路由和控制器动作。同样,中间件组使得一次将多个中间件分配给一个路由更加方便:

  1. Route::get('/', function () {
  2. //
  3. })->middleware('web');
  4. Route::group(['middleware' => ['web']], function () {
  5. //
  6. });
  7. Route::middleware(['web', 'subscribed'])->group(function () {
  8. //
  9. });