📜  Laravel-中间件

📅  最后修改于: 2020-10-23 07:58:39             🧑  作者: Mango


中间件充当请求和响应之间的桥梁。这是一种过滤机制。本章介绍了Laravel中的中间件机制。

Laravel包含一个中间件,用于验证应用程序的用户是否已通过身份验证。如果用户通过了身份验证,它将重定向到主页,否则,将重定向到登录页面。

可以通过执行以下命令来创建中间件-

php artisan make:middleware 

替换为中间件的名称。您创建的中间件可以在app / Http / Middleware目录中看到。

观察以下示例以了解中间件机制-

步骤1-现在让我们创建AgeMiddleware。为了创建它,我们需要执行以下命令-

php artisan make:middleware AgeMiddleware

步骤2-成功执行命令后,您将收到以下输出-

AgeMiddleware

步骤3AgeMiddleware将在app / Http / Middleware创建。新创建的文件将具有为您创建的以下代码。

注册中间件

我们需要在使用每个中间件之前对其进行注册。 Laravel中有两种类型的中间件。

  • 全球中间件
  • 路由中间件

全局中间件将在应用程序的每个HTTP请求上运行,而路由中间件将分配给特定的路由。中间件可以在app / Http / Kernel.php中注册。该文件包含两个属性$ middleware$ routeMiddleware$ middleware属性用于注册全局中间件,而$ routeMiddleware属性用于注册特定于路由的中间件。

要注册全局中间件,请在$ middleware属性末尾列出该类。

protected $middleware = [
   \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
   \App\Http\Middleware\EncryptCookies::class,
   \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
   \Illuminate\Session\Middleware\StartSession::class,
   \Illuminate\View\Middleware\ShareErrorsFromSession::class,
   \App\Http\Middleware\VerifyCsrfToken::class,
];

要注册特定于路由的中间件,请将键和值添加到$ routeMiddleware属性。

protected $routeMiddleware = [
   'auth' => \App\Http\Middleware\Authenticate::class,
   'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
   'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
];

我们在前面的示例中创建了AgeMiddleware 。现在,我们可以在特定于路由的中间件属性中注册它。该注册的代码如下所示。

以下是app / Http / Kernel.php的代码-

 \App\Http\Middleware\Authenticate::class,
      'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
      'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
      'Age' => \App\Http\Middleware\AgeMiddleware::class,
   ];
}

中间件参数

我们还可以使用中间件传递参数。例如,如果您的应用程序具有不同的角色,例如用户,管理员,超级管理员等,并且您想要基于角色对操作进行身份验证,则可以通过将参数与中间件一起传递来实现。我们创建的中间件包含以下函数,我们可以在$ next参数之后传递自定义参数。

public function handle($request, Closure $next) {
   return $next($request);
}

步骤1-通过执行以下命令来创建RoleMiddleware-

php artisan make:middleware RoleMiddleware

步骤2-成功执行后,您将收到以下输出-

中间件参数

步骤3-在新创建的RoleMiddlewareat app / Http / Middleware / RoleMiddleware.php的handle方法中添加以下代码

步骤4-app \ Http \ Kernel.php文件中注册RoleMiddleware 。在该文件中添加以灰色突出显示的行以注册RoleMiddleware。

角色中间件

步骤5-执行以下命令以创建TestController-

php artisan make:controller TestController --plain

步骤6-成功执行上述步骤后,您将收到以下输出-

测试控制器

步骤7-将以下代码行复制到app / Http / TestController.php文件。

app / Http / TestController.php

Test Controller.";
   }
}

步骤8-app / Http / routes.php文件中添加以下代码行。

app / Http / routes.php

Route::get('role',[
   'middleware' => 'Role:editor',
   'uses' => 'TestController@index',
]);

步骤9-访问以下URL以使用参数测试中间件

http://localhost:8000/role

步骤10-输出将如下图所示。

角色编辑器

终止中间件

响应发送到浏览器后,可终止的中间件将执行某些任务。这可以通过在中间件中创建带有终止方法的中间件来实现。终止的中间件应在全局中间件中注册。终止方法将接收两个参数$ request$ response。可以创建终止方法,如以下代码所示。

步骤1-通过执行以下命令来创建TerminateMiddleware

php artisan make:middleware TerminateMiddleware

步骤2-上面的步骤将产生以下输出-

终止中间件

步骤3-将以下代码复制到新创建的TerminateMiddleware中,位于app / Http / Middleware / TerminateMiddleware.php。

Executing statements of terminate method of TerminateMiddleware.";
   }
}

步骤4-app \ Http \ Kernel.php文件中注册TerminateMiddleware 。在该文件中添加以灰色突出显示的行以注册TerminateMiddleware。

终止中间件

步骤5-执行以下命令以创建ABCController

php artisan make:controller ABCController --plain

步骤6-成功执行URL后,您将收到以下输出-

ABC控制器

步骤7-将以下代码复制到app / Http / ABCController.php文件。

app / Http / ABCController.php

ABC Controller.";
   }
}

步骤8-app / Http / routes.php文件中添加以下代码行。

app / Http / routes.php

Route::get('terminate',[
   'middleware' => 'terminate',
   'uses' => 'ABCController@index',
]);

步骤9-访问以下URL以测试终止中间件。

http://localhost:8000/terminate

步骤10-输出将如下图所示。

ABC控制器