Laravel 中间件

laravel 中间件

中间件充当请求和响应之间的桥梁。这是一种过滤机制。本章向您解释laravel中的中间件机制。

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

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

php artisan make:middleware <middleware-name> </middleware-name>

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

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

第1步 - 让我们现在创建agemiddleware。 要创建它,我们需要执行以下命令 -

php artisan make:middleware agemiddleware

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

agemiddleware

第3步 - agemiddleware 将在 app / http / middleware中 创建。新创建的文件将为您创建以下代码。


namespace app\http\middleware;
use closure;

class agemiddleware {
   public function handle($request, closure $next) {
      return $next($request);
   }
}</pre--> 

 

<h2>注册中间件</h2>

在使用之前,我们需要注册每个中间件。laravel中有两种类型的中间件。

<ul> <li>全球中间件</li> <li>路由中间件</li> </ul>

在 <strong>全球中间件</strong> 将应用的每个http请求运行,而 <strong>路由中间件</strong> 将被分配到一个特定的路线。中间件可以在 <strong>app / http / kernel.php上注册。</strong> 该文件包含两个属性 <strong>$ middleware</strong> 和 <strong>$ routemiddleware</strong> 。 <strong>$ middleware</strong> 属性用于注册全局中间件, <strong>$ routemiddleware</strong> 属性用于注册路由特定中间件。

要注册全局中间件,请在$ 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,
];
<h3>例</h3>

我们在前面的例子中创建了 <strong>agemiddleware</strong> 。我们现在可以在路由特定的中间件属性中注册它。下面显示了该注册的代码。

以下是 <strong>app / http / kernel.php</strong> 的代码-


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\middleware\agemiddleware::class,
   ];
}

 

<h2>中间件参数</h2>

我们也可以通过中间件传递参数。例如,如果您的应用程序具有不同的角色,如用户,管理员,超级管理员等,并且您希望基于角色对操作进行身份验证,则可以通过向中间件传递参数来实现此操作。我们创建的中间件包含以下函数,我们可以在 <strong>$ next</strong> 参数后传递我们的自定义参数。

public function handle($request, closure $next) {
   return $next($request);
}
<h3>例</h3>

<strong>第1步</strong> - 通过执行以下命令创建rolemiddleware -

php artisan make:middleware rolemiddleware

<strong>第2步</strong> - 成功执行后,您将收到以下输出 -

<img src="/public/core/edit/php/../attached/20231217141745_94152.jpg" alt="" border="0" />

<strong>第3步</strong> - 在新创建的rolemiddlewareat <strong>应用/ http / middleware / rolemiddleware.php</strong> 的句柄方法中添加以下代码 <strong>。</strong>


namespace app\http\middleware;
use closure;

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

<strong>第4步</strong> - 在 <strong>app \ http \ kernel.php</strong> 文件中注册 <strong>rolemiddleware</strong> 。添加该文件中以灰色突出显示的行来注册rolemiddleware。

<img src="/public/core/edit/php/../attached/20231217141824_77722.jpg" alt="" border="0" />

<strong>第5步</strong> - 执行以下命令来创建 <strong>testcontroller</strong> -

php artisan make:controller testcontroller --plain

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

<img src="/public/core/edit/php/../attached/20231217141927_21931.jpg" alt="" border="0" />

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

<strong>应用程序/ http / testcontroller.php</strong>


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 "
test controller.";
   }
}

<strong>第8步</strong> - 在 <strong>app / http / routes.php</strong> 文件中添加以下代码行。

<strong>应用程序/ http / routes.php文件</strong>

route::get('role',[
   'middleware' => 'role:editor',
   'uses' => 'testcontroller@index',
]);

<strong>第9步</strong> - 访问以下url以使用参数测试中间件

http://localhost:8000/role

<strong>第10步</strong> - 输出将显示如下图所示。

<img src="/public/core/edit/php/../attached/20231217142002_35834.jpg" alt="" border="0" />

 

<h2>可终止的中间件</h2>

响应已发送到浏览器后,终止中间件执行一些任务。这可以通过在中间件中使用 <strong>terminate</strong> 方法创建中间件来完成。终止中间件应该注册到全局中间件。terminate方法将接收两个参数 <strong>$ request</strong> 和 <strong>$ response。</strong> 可以按照以下代码中所示创建终止方法。

<h3>例</h3>

<strong>第1步</strong> - 通过执行以下命令创建 <strong>terminatemiddleware</strong> 。

php artisan make:middleware terminatemiddleware

<strong>第2步</strong> - 上述步骤将产生以下输出 -

<img src="/public/core/edit/php/../attached/20231217142033_92770.jpg" alt="" border="0" />

<strong>第3步</strong> - 将以下代码复制到 <strong>app / http / middleware / terminatemiddleware.php中</strong> 新创建的 <strong>terminatemiddleware</strong> 中 <strong>。</strong>


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 "
executing statements of terminate method of terminatemiddleware.";
   }
}

<strong>第4步</strong> - 在 <strong>app \ http \ kernel.php</strong> 文件中注册 <strong>terminatemiddleware</strong> 。添加该文件中以灰色突出显示的行来注册terminatemiddleware。 <em>**</em>

<img src="/public/core/edit/php/../attached/20231217142107_45919.jpg" alt="" border="0" />

<strong>第5步</strong> - 执行以下命令创建 <strong>abccontroller</strong> 。

php artisan make:controller abccontroller --plain

<strong>第6步</strong> - 成功执行url后,您将收到以下输出 -

<img src="/public/core/edit/php/../attached/20231217142144_87634.jpg" alt="" border="0" />

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

<strong>应用程序/ http / abccontroller.php</strong>


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 "
abc controller.";
   }
}

<strong>第8步</strong> - 在 <strong>app / http / routes.php</strong> 文件中添加以下代码行。

<strong>应用程序/ http / routes.php文件</strong>

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

<strong>第9步</strong> - 访问以下url以测试可终止的中间件。

http://localhost:8000/terminate

<strong>第10步</strong> - 输出将显示如下图所示。

<img src="/public/core/edit/php/../attached/20231217142226_55307.jpg" alt="" border="0" />

<h3><a href="/s7900103/laravel 命名空间.html">下一节:laravel 命名空间</a></h3> <h3><a href="/php/php_sz/180.html">laravel 教程</a></h3>
相关文章