Code前端首页关于Code前端联系我们

Laravel 教程:中间件(一种过滤机制)

terry 2年前 (2023-09-25) 阅读数 49 #后端开发
顾名思义,中间件充当请求和响应之间的中介。它是一种过滤机制。例如,Laravel 包含用于验证应用程序的用户是否经过身份验证的中间件。如果用户通过身份验证,他将被重定向到主页,否则他将被重定向到登录页面。可以通过执行以下命令来创建中间件 -
php artisan make:middleware <middleware-name>

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

示例

第 1 步 – 现在让我们创建 AgeMiddleware 中间件。我们需要执行以下命令 -
php artisan make:middleware AgeMiddleware
步骤 2 - 成功执行命令后,您将得到以下输出 -
Laravel教程:中间件(过滤机制类型)

步骤 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参数后面的参数。?如何处理新创建的角色中间件 - 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 中间件已在此文件中注册。 ?复制到 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 – 访问以下 URL 并使用参数

http://localhost:8000/role 步骤 10 – 输出如下图所示。
Laravel教程:中间件(过滤机制类型) 可终止中间件

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

示例

步骤 1 - 通过执行以下命令创建 TerminateMiddleware 中间件。 ?如下:
<?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 步 - 在文件 app\Http\Kernel.php 中注册 TerminateMiddleware。
Laravel教程:中间件(过滤机制类型)

灰色突出显示的行将添加到此文件中 注册 TerminateMiddleware 中间件。步骤 5 - 运行以下命令来创建驱动程序。 ?

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 – 访问以下 URL 并测试终止中间件。

http://localhost:8000/terminate 步骤 10 – 输出如下图所示。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门