ミドルウェアは、異なるシステム、アプリケーション、またはサービス間のシームレスな通信とデータ交換を可能にするソフトウェア設計パターンです。これは、異種コンポーネント間の相互作用を促進し、機能を追加し、システム全体のパフォーマンスを向上させる上で重要な役割を果たします。
以前のプロジェクトでは、ログインしたユーザーが登録ページにアクセスしたときに再登録を求められるという問題が発生しました。これはミドルウェアの実装が不足していたため、ユーザー エクスペリエンスが低下したことが原因でした。
PHP では、ミドルウェアを使用してユーザー登録とログイン機能を処理し、スムーズなユーザー エクスペリエンスを保証できます。ミドルウェアはさまざまなコンポーネント間のブリッジとして機能し、シームレスな通信とデータ交換を可能にします。
if ($_SESSION['user'] ?? false){ header('location: /'); exit(); }
ユーザーがログインしているかどうかをチェックします。そうでない場合は、スクリプトを終了して認証されたユーザーを見つけます。
routes.php ファイルで、ルートに「ゲスト」キーを追加して、ルートをミドルウェアに関連付けることができます。
$router->get('/register', 'controllers/registration/create.php')->only('guest');
プロジェクトが期待どおりに動作しているかどうかを確認するには、唯一のメソッドにデバッグ ステートメントを追加できます。
public function only($key){ dd($key); }
唯一のメソッドが get メソッドに関連付けられているため、null 値を扱うことができず、値を返さないため、エラーが表示されます。したがって、メソッドを書き直す必要があります。
すべての値を唯一のメソッドに返すには、router.php ファイルの add メソッドを次のように書き換える必要があります。
public function add($method, $uri, $controller) { $this->routes[] = [ 'uri' => $uri, 'controller' => $controller, 'method' => $method, 'middleware'=>null ]; return $this; }
これで、プロジェクトがうまく機能していることがわかります。
ミドルウェア キーを受け入れるために、router.php ファイル内の唯一のメソッドを変更する必要があります:
public function only($key){ $this->routes[array_key_last($this->routes)]['middleware']=$key; return $this; }
create.php ファイルで、ユーザーがログインしているか、ミドルウェアを使用しているゲストであるかを確認できます。
if ($route['middleware']==='guest'){ if($_SESSION['user'] ?? false){ header('location: /'); exit(); } } if ($route['middleware']==='auth'){ if(! $_SESSION['user'] ?? false){ header('location: /'); exit(); } }
認証されたユーザーのみがすべてのページにアクセスできますが、ゲストは限られたページのみにアクセスできます。
ミドルウェア クラスを整理するには、コア フォルダーに Middleware という名前の新しいディレクトリを作成します。リラックスするためには、労力と時間を節約するために、ある時点で変更を加える必要があるためです。これにより、プロジェクトを理解しやすくすることができます。ここでは 3 つの異なるクラスを作成します。
Authenticated.php ファイルは、ユーザーがログインしているかどうかを確認し、ログインしている場合はホームページにリダイレクトします。
<?php namespace Core\Middleware; class Authenticated { public function handle() { if (! $_SESSION['user'] ?? false) { header('location: /'); exit(); } } }
Guest.php ファイルは、ユーザーがログインしていないかどうかを確認し、ログインしている場合はホームページにリダイレクトします。
<?php namespace Core\Middleware; class Guest { public function handle() { if ($_SESSION['user'] ?? false) { header('location: /'); exit(); } } }
Middleware.php ファイルは、MAP 定数を使用してミドルウェア キーをそれぞれのクラスにマップします。また、ミドルウェアが存在するかどうかもチェックします。そうでない場合は、プロジェクトにミドルウェアを追加するために、キャッチされなかった例外をユーザーに表示します:
<?php namespace Core\Middleware; class Middleware { public const MAP = [ 'guest' => Guest::class, 'auth' => Authenticated::class ]; public static function resolve($key) { if (!$key) { return; } $middleware = static::MAP[$key] ?? false; if (!$middleware) { throw new \Exception("No matching middleware found for key '{$key}'."); } (new $middleware)->handle(); } }
これらの変更を加えることで、プロジェクトがうまく機能していることがわかります。
しっかりと理解していただけたと思います。
以上がミドルウェアの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。