开发手册 欢迎您!
软件开发者资料库

Laravel - 中间件

Laravel Middleware - 从简单和简单的步骤学习Laravel,从基本到高级概念,包括概述,安装,应用程序结构,配置,路由,中间件,命名空间,控制器,请求,Cookie,响应,视图,刀片模板,重定向,工作数据库,错误和日志记录,表单,本地化,会话,验证,文件上传,发送电子邮件,Ajax,错误,事件处理,外观,安全性,合同,CSRF保护,身份验证,授权,工匠控制台,加密,哈希,了解发布处理。

中间件充当请求和响应之间的桥梁.它是一种过滤机制.本章将向您介绍Laravel中的中间件机制.

Laravel包含一个中间件,用于验证应用程序的用户是否经过身份验证.如果用户经过身份验证,则会重定向到主页,否则会重定向到登录页面.

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

php artisan make:middleware 

< middleware-name> 替换为中间件的名称.您创建的中间件可以在 app/Http/Middleware 目录中看到.

示例

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

第1步 : 现在让我们创建AgeMiddleware.要创建它,我们需要执行以下命令 :

php artisan make:middleware AgeMiddleware

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

AgeMiddleware

第3步 :   AgeMiddleware 将在 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的句柄方法中添加以下代码.

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

RoleMiddleware

第5步 : 执行以下命令来创建 TestController :

php artisan make:controller TestController --plain

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

TestController

第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步 : 输出将如下图所示.

角色编辑器

可终止的中间件

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

示例

第1步 : 通过执行以下命令创建 TerminateMiddleware .

php artisan make:middleware TerminateMiddleware

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

终止中间件

第3步 : 在 app/Http/Middleware/TerminateMiddleware.php中新复制的 TerminateMiddleware 中复制以下代码.

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

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

TerminateMiddleware

第5步 : 执行以下命令来创建 ABCController .

php artisan make:controller ABCController --plain

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

ABCController

第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 Controller