グッズ

Laravelミドルウェアの仕組み

Laravel ミドルウェアは、ユーザーのリクエストとアプリケーションのレスポンスの間に介在する中間アプリケーション層です。

これは、ユーザー (Laravel ビュー) がサーバー (Laravel コントローラー) にリクエストを送信すると、リクエストがミドルウェアを通過することを意味します。 このようにして、ミドルウェアはリクエストが認証されているかどうかを確認できます。 

  • ユーザーのリクエストが認証された場合、リクエストはバックエンドに送信されます。
  • ユーザーのリクエストが認証されていない場合、ミドルウェアはユーザーをログイン画面にリダイレクトします。

Laravel を使用すると、 defi完了し、追加のミドルウェアを使用して、認証を除くさまざまなタスクを実行します。 

認証やCSRF保護などのLaravelミドルウェアはディレクトリにあります アプリ/Http/ミドルウェア .

したがって、ミドルウェアは http リクエスト フィルターであり、これを介して条件を確認し、アクションを実行できると言えます。

ミドルウェアの作成

新しいミドルウェアを作成するには、次のコマンドを実行します。

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

私たちは、 middleware そして私たちはそれを呼びます CheckAge, artisan 次のように答えます。

上のウィンドウは、ミドルウェアが「」という名前で正常に作成されたことを示しています。 チェックエイジ "

CheckAge ミドルウェアが作成されているかどうかを確認するには、app/Http/Middleware フォルダー内のプロジェクトに移動します。新しく作成されたファイルが表示されます。

新しく作成されたファイルには次のコードがあります

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}

ミドルウェアを使用する

ミドルウェアを使用するには、ミドルウェアを登録する必要があります。

Laravel には XNUMX 種類のミドルウェアがあります。

  • Middleware globale
  • Route Middleware

Il グローバルミドルウェア アプリケーションからのすべての HTTP リクエストで実行されますが、 ルートミドルウェア 特定のパスに割り当てられます。 ミドルウェアは、 app/Http/Kernel.php。 このファイルには XNUMX つのプロパティが含まれています $ミドルウェア e $routeミドルウェア . $ミドルウェア プロパティ グローバルミドルウェアと所有権を登録するために使用されます $routeミドルウェア ルート固有のミドルウェアを登録するために使用されます。

グローバル ミドルウェアを登録するには、$middleware プロパティの末尾にクラスをリストします。

protected $middleware = [
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

ルート固有のミドルウェアを登録するには、キーと値を $routeMiddleware プロパティに追加します。

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];

我々は作成した チェックエイジ 前の例では。 これをミドルウェアのルート プロパティに登録できるようになりました。 このような登録のコードを以下に示します。

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
    ];

ミドルウェアのパラメーター

ミドルウェアでパラメーターを渡すこともできます。 

たとえば、アプリケーションにユーザー、管理者、スーパー管理者などのさまざまなロールがある場合。 ロールに基づいてアクションを認証したい場合は、ミドルウェアでパラメーターを渡すことで実行できます。 

作成したミドルウェアには次の関数が含まれており、引数の後にカスタム引数を渡すことができます $next .

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

次に、ゼロから作成する新しいミドルウェアにロール パラメータを設定してみましょう。次に、次のコマンドを実行してロール ミドルウェアの作成に進みます。

次のようにハンドル メソッドを変更します。

<?php

namespace App\Http\Middleware;
use Closure;

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

パラメータを追加しました $role、およびメソッド内の行 echo 出力をロールの名前に書き込みます。

イノベーションニュースレター
イノベーションに関する最も重要なニュースをお見逃しなく。 メールで受け取るにはサインアップしてください。

次に、特定のパスに RoleMiddleware ミドルウェアを登録しましょう

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
    ];

パラメータを使用してミドルウェアをテストするには、リクエストとレスポンスを作成する必要があります。 応答をシミュレートするために、TestController と呼ぶコントローラーを作成しましょう。

php artisan make:controller TestController --plain

実行したばかりのコマンドは、フォルダー内に新しいコントローラーを作成します app/Http/TestController.php、メソッドを変更します index 線で echo "<br>Test Controller.";

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

レスポンスを設定したら、ファイルを編集してリクエストを作成します routes.phpを追加することによって route role

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

この時点で、URL にアクセスして例を試すことができます。 http://localhost:8000/role

ブラウザにはXNUMXつが表示されます echo

Role editor
Test Controller

終了可能なミドルウェア

Il terminable Middleware 応答がブラウザに送信された後、いくつかのタスクを実行します。 これは、メソッドを使用してミドルウェアを作成することで実現できます。 ミドルウェアで終了します。 Il terminable Middleware に登録する必要があります middleware グローバル。 メソッド terminate XNUMX つの引数を受け取ります $ request e $応答。 

この方法 Terminate 次のコードに示すように作成する必要があります。

php artisan make:middleware 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.";
   }
}

この場合、メソッドがあります handle とメソッド terminate XNUMXつのパラメータで $request e $response.

それでは、ミドルウェアを登録しましょう

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
        'terminate' => \App\Http\Middleware\TerminateMiddleware::class,
    ];

次に、応答をシミュレートするコントローラーを作成する必要があります

php artisan make:controller XYZController --plain

クラスの内容を変更する

class XYZController extends Controller {
   public function index() {
      echo "<br>XYZ Controller.";
   }
}

次に、ファイルを編集する必要があります routes/web.php リクエストを有効にするために必要なルートを追加する

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

この時点で、URL にアクセスして例を試すことができます。 http://localhost:8000/terminate

ブラウザには次の行が表示されます

Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware

Ercole Palmeri

あなたも好きかも:

イノベーションニュースレター
イノベーションに関する最も重要なニュースをお見逃しなく。 メールで受け取るにはサインアップしてください。

最近の記事

子供のためのぬり絵の利点 - すべての年齢層のための魔法の世界

ぬり絵を通じて細かい運動能力を発達させることで、子供たちは書くなどのより複雑なスキルを習得できるようになります。色…

2月2024

未来はここにあります: 海運業界が世界経済をどのように変革しているか

海軍部門は真の世界経済大国であり、150 億市場に向けて舵を切り続けています...

1月2024

パブリッシャーと OpenAI が人工知能によって処理される情報の流れを規制する契約に署名

先週の月曜日、フィナンシャル・タイムズ紙はOpenAIとの契約を発表した。 FT は世界クラスのジャーナリズムにライセンスを供与しています…

4月30 2024

オンライン支払い: ストリーミング サービスで永久に支払いができる仕組みをご紹介します

何百万人もの人々がストリーミング サービスに月額料金を払っています。あなたは…というのが一般的な意見です。

4月29 2024

あなたの言語でイノベーションを読む

イノベーションニュースレター
イノベーションに関する最も重要なニュースをお見逃しなく。 メールで受け取るにはサインアップしてください。

Seguici