Laravel 专题
您的位置:php > Laravel专题 > Laravel中间件
Laravel中间件
作者:--    发布时间:2019-11-20
正如其名称提示,中间件作为请求和响应之间的中间人。它是一种过滤机制类型。例如,laravel包括一个中间件用来验证应用程序的用户认证与否。如果用户通过验证,它将被重定向到主页,否则将被重定向到登录页面。
中间件可以通过执行以下命令来创建 -
php artisan make:middleware <middleware-name> 

使用你的中间件名称替换<middleware-name>。创建可以看到中间件在 app/http/middleware 目录。

示例

第1步 - 现在,让我们创建 agemiddleware 中间件。我们需要执行下面的命令-
php artisan make:middleware agemiddleware
第2步 - 命令成功执行后,会收到以下输出 -

第3步 − agemiddlware 会在 app/http/middleware 文件中创建。新创建的文件将自动创建下面代码:

<?php
namespace app\http\middleware;
use closure;

class agemiddleware {
   public function handle($request, closure $next) {
      return $next($request);
   }
}

注册中间件

我们需要在使用前注册每一个中间件。在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
<?php
namespace app\http;
use illuminate\foundation\http\kernel as httpkernel;

class kernel extends httpkernel {
   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,
   ];
  
   protected $routemiddleware = [
      'auth' => \app\http\middleware\authenticate::class,
      'auth.basic' => \illuminate\auth\middleware\authenticatewithbasicauth::class,
      'guest' => \app\http\middleware\redirectifauthenticated::class,
      'age' => \app\http\middlware\agemiddleware::class,
   ];
}

中间件参数

我们也可以传递中间件参数。例如,如果您的应用程序有不同角色,如用户,管理员,超级管理员等,并且要验证基于角色的动作,这可以通过参数传递中间件来实现。我们创建的中间件包含以下功能,我们可以通过 $next 参数之后,自定义参数。

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

示例

第1步 - 通过执行以下命令创建角色中间件 -
php artisan make:middleware rolemiddleware
第2步 - 成功执行后,会收到以下输出

第3步  − 添加以下代码到新创建的角色中间件的处理方法 - app/http/middleware/rolemiddleware.php.

<?php
namespace app\http\middleware;
use closure;

class rolemiddleware {
   public function handle($request, closure $next, $role) {
      echo "role: ".$role;
      return $next($request);
   }
}

第4步  − 在 app\http\kernel.php 文件中注册角色中间件。 加入灰色突出的线条的是在该文件中注册 rolemiddleware 中间件。

第5步 - 执行以下命令来创建测试控制器 -
php artisan make:controller testcontroller
第6步 - 成功执行后,您会收到以下输出 -

第7步 - 将以下代码复制到 app/http/testcontroller.php 文件。

app/http/testcontroller.php

<?php
namespace app\http\controllers;
use illuminate\http\request;
use app\http\requests;
use app\http\controllers\controller;

class testcontroller extends controller {
   public function index(){
      echo "<br>test controller.";
   }
}
第8步 - 添加下面一行代码到 app/http/routes.php 文件。

app/http/routes.php

route::get('role',[
   'middleware' => 'role:editor',
   'uses' => 'testcontroller@index',
]);
第9步 - 访问以下网址来测试带参数中间件

http://localhost:8000/role

第10步 - 输出显示如下图中所示。

可终止的中间件

响应已经发送给浏览器后可终止中间件执行一些任务。这可以通过使用创建中间件“终止”方法的中间件来实现。可终止中间件会注册全局中间件。该终止方法将接受两个参数:$request 和 $response。终止方法可以被创建,如在下面显示的代码。

示例

第1步- 通过执行以下命令创建 terminatemiddleware 中间件。
php artisan make:middleware terminatemiddleware
第2步 - 这将产生以下输出 -

第3步 - 复制下面的代码到新创建文件 - terminatemiddleware 在 app/http/middleware/terminatemiddleware.php 文件中如下:

<?php
namespace app\http\middleware;
use closure;

class terminatemiddleware {
   public function handle($request, closure $next) {
      echo "executing statements of handle method of terminatemiddleware.";
      return $next($request);
   }
   
   public function terminate($request, $response){
      echo "<br>executing statements of terminate method of terminatemiddleware.";
   }
}

第4步  − 注册 terminatemiddleware 到 app\http\kernel.php 文件中.

加了灰色突出的线条的是该文件中注册的 terminatemiddleware 中间件。

第5步 - 执行以下命令来创建一个控制器。
php artisan make:controller abccontroller
第6步 - url成功执行后,会收到以下输出 -

第7步 - 将以下代码复制到 app/http/abccontroller.php 文件。

app/http/abccontroller.php

<?php
namespace app\http\controllers;
use illuminate\http\request;
use app\http\requests;
use app\http\controllers\controller;

class abccontroller extends controller {
   public function index(){
      echo "<br>abc controller.";
   }
}
第8步 - 添加下面的一行代码到 app/http/routes.php 文件。

app/http/routes.php

route::get('terminate',[
   'middleware' => 'terminate',
   'uses' => 'abccontroller@index',
]);
第9步 - 访问以下网址测试可终止中间件。

http://localhost:8000/terminate

第10步 - 如下面的图片输出的结果。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册