Laravel 中间件

Laravel 中间件

中间件在请求和响应之间起到了一个桥梁的作用。它是一种过滤机制。本章将为您解释Laravel中的中间件机制。

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

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

php artisan make:middleware <middleware-name>

将下面的英文翻译成中文,不解释,保留HTML格式:

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

示例

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

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

php artisan make:middleware AgeMiddleware

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

Laravel 中间件

步骤3AgeMiddleware 将会在 app/Http/Middleware 中创建。新创建的文件已经为您创建了以下代码。

<?php

namespace App\Http\Middleware;
use Closure;

class AgeMiddleware {
   public function handle(request, Closurenext) {
      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,
   ];

   protectedrouteMiddleware = [
      '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,
   ];
}

中间件参数

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

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

示例

步骤1 - 执行以下命令创建RoleMiddleware –

php artisan make:middleware RoleMiddleware

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

Laravel 中间件

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

<?php

namespace App\Http\Middleware;
use Closure;

class RoleMiddleware {
   public function handle(request, Closurenext, role) {
      echo "Role: ".role;
      return next(request);
   }
}

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

Laravel 中间件

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

php artisan make:controller TestController --plain

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

Laravel 中间件

步骤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 - 访问以下URL以测试带参数的中间件

http://localhost:8000/role

步骤10 - 输出结果将会显示如以下图片所示。

Laravel 中间件

可终止的中间件

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

示例

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

php artisan make:middleware TerminateMiddleware

步骤2 - 上述步骤将产生以下输出 –

Laravel 中间件

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

<?php

namespace App\Http\Middleware;
use Closure;

class TerminateMiddleware {
   public function handle(request, Closurenext) {
      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 。在文件中添加灰色高亮的行以注册 TerminateMiddleware。

Laravel 中间件

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

php artisan make:controller ABCController --plain

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

Laravel 中间件

步骤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 - 访问以下URL以测试Terminable中间件。

http://localhost:8000/terminate

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

Laravel 中间件

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程