Laravel-ミドルウェア

ミドルウェアは、要求と応答の間のブリッジとして機能します。これは一種のフィルタリングメカニズムです。この章では、Laravelのミドルウェアメカニズムについて説明します。

Laravelには、アプリケーションのユーザーが認証されているかどうかを検証するミドルウェアが含まれています。ユーザーが認証されている場合はホームページにリダイレクトされ、認証されていない場合はログインページにリダイレクトされます。

ミドルウェアは、次のコマンドを実行することで作成できます-

php artisan make:middleware <middleware-name>

を交換してください <middleware-name>ミドルウェアの名前で。あなたが作成したミドルウェアはで見ることができますapp/Http/Middleware ディレクトリ。

次の例を観察して、ミドルウェアのメカニズムを理解してください。

Step 1−AgeMiddlewareを作成しましょう。それを作成するには、次のコマンドを実行する必要があります-

php artisan make:middleware AgeMiddleware

Step 2 −コマンドが正常に実行されると、次の出力が表示されます。

Step 3AgeMiddleware で作成されます app/Http/Middleware。新しく作成されたファイルには、次のコードがすでに作成されています。

<?php

namespace App\Http\Middleware;
use Closure;

class AgeMiddleware {
   public function handle($request, Closure $next) {
      return $next($request);
   }
}

ミドルウェアの登録

ミドルウェアを使用する前に、すべてのミドルウェアを登録する必要があります。Laravelには2種類のミドルウェアがあります。

  • グローバルミドルウェア
  • ルートミドルウェア

ザ・ Global Middleware アプリケーションのすべてのHTTPリクエストで実行されますが、 Route Middleware特定のルートに割り当てられます。ミドルウェアはで登録できますapp/Http/Kernel.php. このファイルには2つのプロパティが含まれています $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\Middleware\AgeMiddleware::class,
   ];
}

ミドルウェアパラメータ

ミドルウェアでパラメータを渡すこともできます。たとえば、アプリケーションにユーザー、管理者、スーパー管理者などのさまざまな役割があり、役割に基づいてアクションを認証する場合、これはミドルウェアでパラメーターを渡すことで実現できます。作成するミドルウェアには次の関数が含まれており、カスタム引数を$next 引数。

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

Step 1 −次のコマンドを実行してRoleMiddlewareを作成します−

php artisan make:middleware RoleMiddleware

Step 2 −正常に実行されると、次の出力が表示されます−

Step 3 −新しく作成されたRoleMiddlewareatのhandleメソッドに次のコードを追加します 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);
   }
}

Step 4 −RoleMiddlewareをに登録する app\Http\Kernel.phpファイル。そのファイルに灰色で強調表示された行を追加して、RoleMiddlewareを登録します。

Step 5 −次のコマンドを実行して作成します TestController

php artisan make:controller TestController --plain

Step 6 −上記のステップが正常に実行されると、次の出力が表示されます。

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

Step 8 −次のコード行をに追加します app/Http/routes.php ファイル。

app/Http/routes.php

Route::get('role',[
   'middleware' => 'Role:editor',
   'uses' => 'TestController@index',
]);

Step 9 −次のURLにアクセスして、パラメータを使用してミドルウェアをテストします

http://localhost:8000/role

Step 10 −次の図に示すように出力が表示されます。

終了可能なミドルウェア

終了可能なミドルウェアは、応答がブラウザーに送信された後にいくつかのタスクを実行します。これは、ミドルウェアを作成することで実現できます。terminateミドルウェアのメソッド。終了可能なミドルウェアは、グローバルミドルウェアに登録する必要があります。終了メソッドは2つの引数を受け取ります$request そして $response. 次のコードに示すように、terminateメソッドを作成できます。

Step 1 −作成 TerminateMiddleware 以下のコマンドを実行します。

php artisan make:middleware TerminateMiddleware

Step 2 −上記の手順により、次の出力が生成されます−

Step 3 −新しく作成したコードに次のコードをコピーします TerminateMiddlewareapp/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.";
   }
}

Step 4 −登録する TerminateMiddlewareapp\Http\Kernel.phpファイル。そのファイルに灰色で強調表示された行を追加して、TerminateMiddlewareを登録します。

Step 5 −次のコマンドを実行して作成します ABCController

php artisan make:controller ABCController --plain

Step 6 − URLが正常に実行されると、次の出力が表示されます−

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

Step 8 −次のコード行をに追加します app/Http/routes.php ファイル。

app/Http/routes.php

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

Step 9 −次のURLにアクセスして、ターミナブルミドルウェアをテストします。

http://localhost:8000/terminate

Step 10 −次の図に示すように出力が表示されます。