Symfony フレームワーク ミドルウェアの高度な使用法とサンプル デモンストレーション
はじめに:
ミドルウェアは、最新の Web フレームワークにおける一般的な概念の 1 つであり、HTTP リクエストとレスポンス、およびリクエストの多層処理を実行できます。が前処理されるか、応答が後処理されます。 Symfony フレームワークには豊富なミドルウェア機能も用意されており、この記事では、Symfony フレームワーク ミドルウェアの高度な使用方法を紹介し、実際の例を通じてその機能を示します。
1.1 カスタム ミドルウェアの作成
新しいクラスを作成することで、独自のミドルウェアを定義できます。まず、新しいファイル SampleMiddleware.php を src/Middleware ディレクトリに作成します。
<?php namespace AppMiddleware; use SymfonyComponentHttpFoundationRequest; use SymfonyComponentHttpFoundationResponse; class SampleMiddleware { public function handle(Request $request, Closure $next) { // 在中间件处理请求之前的逻辑 // ... // 调用下一个中间件或路由处理器 $response = $next($request); // 在中间件处理完响应之后的逻辑 // ... return $response; } }
上の例では、SampleMiddleware クラスを定義し、リクエスト オブジェクト $request とクロージャ $next をパラメータとして受け取るハンドル メソッドを実装しました。この方法では、ミドルウェアがリクエストを処理する前のロジックと、レスポンスを処理した後のロジックを書くことができます。
1.2 ミドルウェアの登録
次に、カスタム ミドルウェアを Symfony フレームワークに登録する必要があります。 config/services.yaml ファイルを開き、次の構成を追加します。
services: AppMiddlewareSampleMiddleware: tags: - { name: kernel.event_subscriber }
上記の構成を通じて、フレームワークは定義したミドルウェアを自動的に検出して登録します。
2.1 ルーティング ミドルウェア
ルーティング ミドルウェアは、特定のパスを処理できます。ミドルウェアを適用する必要があるルートは、routes.yaml ファイルで指定できます。
index: path: / controller: AppControllerDefaultController::indexAction middleware: ['AppMiddlewareSampleMiddleware']
上記の例では、SampleMiddleware ミドルウェアをインデックス パスのルーティング リクエストに適用します。
2.2 グローバル ミドルウェア
グローバル ミドルウェアはすべてのルートに適用でき、リクエストごとに処理する必要があるロジックに非常に役立ちます。 config/packages/framework.yaml ファイルでグローバルミドルウェアを構成できます。
framework: middleware: ['AppMiddlewareSampleMiddleware']
上記の構成では、SampleMiddleware ミドルウェアがすべてのルーティング リクエストに適用されます。
2.3 例外処理ミドルウェア
例外処理ミドルウェアは、アプリケーションでスローされた例外を処理するために使用できます。例外をキャッチして処理するための新しいミドルウェアを作成できます。
<?php namespace AppMiddleware; use SymfonyComponentHttpFoundationRequest; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentHttpKernelExceptionHttpExceptionInterface; class ExceptionHandlerMiddleware { public function handle(Request $request, Closure $next) { try { $response = $next($request); } catch (HttpExceptionInterface $e) { $response = new Response($e->getMessage(), $e->getStatusCode()); } return $response; } }
上の例では、ExceptionHandlerMiddleware クラスを作成し、handle メソッドで try-catch ブロックを使用して、スローされた HttpExceptionInterface 例外をキャッチしました。例外がキャッチされた場合は、必要に応じて処理をカスタマイズできます。
<?php namespace AppMiddleware; use SymfonyComponentHttpFoundationRequest; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentHttpKernelExceptionAccessDeniedHttpException; class AdminMiddleware { public function handle(Request $request, Closure $next) { // 检查用户是否已登录 // ... // 如果未登录,则抛出AccessDeniedHttpException异常 if (!$user->isLoggedIn()) { throw new AccessDeniedHttpException('Access Denied'); } return $next($request); } }次に、/admin パスのルートに AdminMiddleware ミドルウェアを適用します。
admin: path: /admin controller: AppControllerAdminController::indexAction middleware: ['AppMiddlewareAdminMiddleware']上記の構成では、ユーザーが /admin パスにアクセスすると、AdminMiddleware ミドルウェアはユーザーがログインしているかどうかを確認します。ログインしていない場合、ユーザーはログイン ページにリダイレクトされ、ログインしている場合は管理者ページに進みます。
結論:
以上がSymfony フレームワーク ミドルウェアの高度な使用法とサンプル デモンストレーションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。