ミドルウェアは現代の Web 開発において不可欠な概念であり、人気のある PHP フレームワークである Laravel は HTTP リクエストを処理するためにミドルウェアを広範囲に使用しています。単純な API を構築する場合でも、大規模な Web アプリケーションを構築する場合でも、Laravel のミドルウェアを理解することは、よりクリーンで、より管理しやすく、効率的なコードを作成するための鍵となります。
この記事では、Laravel ミドルウェアについて詳しく説明し、Laravel ミドルウェアとは何か、それを使用する理由、効果的な使用方法について説明します。また、HTTP カーネルの削除など、大幅な変更が加えられた Laravel 11 のミドルウェアの構造についても見ていきます。最後に、Laravel でのカスタム ミドルウェアの作成と使用について説明します。
ミドルウェアは本質的に、受信 HTTP リクエストとアプリケーションの間に存在するフィルターまたはレイヤーです。受信リクエストをインターセプトし、リクエストを次の層に渡す前に、認証、ロギング、リクエストの変更などのさまざまなタスクを実行できます。処理後、ミドルウェアはリクエストがアプリケーションに進むことを許可したり、レスポンスを変更したり、リクエストを完全に拒否したりできます。
簡単に言うと、ミドルウェアはアプリケーションのセキュリティ ゲートまたはガードのようなものです。アプリケーションへのすべてのリクエストはミドルウェアを通過する必要があり、リクエストのタイプに基づいてさまざまな動作を定義できます。
ミドルウェアは、アプリケーションに入る HTTP リクエストをフィルタリングまたは変更するための便利なメカニズムを提供します。 Laravel アプリケーションでミドルウェアが使用される一般的な理由をいくつか示します:
認証と認可: ミドルウェアは、認証されたユーザーまたは特定の権限を持つユーザーのみが特定のルートにアクセスすることを保証できます。
メンテナンス モード: ミドルウェアは、アプリケーションがメンテナンス モードであるかどうかを確認し、すべての受信リクエストに対してメンテナンス メッセージを返すことができます。
ログと監視: ミドルウェアはすべてのリクエストをログに記録したり、パフォーマンスを監視したりできるため、開発者がアプリケーションのパフォーマンスを追跡できるようになります。
CORS (Cross-Origin Resource Sharing): ミドルウェアは CORS ヘッダーを処理して、外部オリジンからのリクエストを許可または拒否できます。
リクエストの変更: 入力文字列のトリミングや入力のサニタイズなど、リクエスト データがコントローラーに到達する前に変更することが必要な場合があります。
ミドルウェアを使用すると、アプリケーション ロジックをクリーンな状態に保ち、セキュリティ、ロギング、リクエストの変更などの横断的な問題から切り離すことができます。
Laravel では、ミドルウェアは一般に次の 3 つのタイプに分類できます。
グローバルミドルウェア
グローバル ミドルウェアは、アプリケーションに受信されるすべての HTTP リクエストに適用されます。一度定義すると、すべてのルートに自動的に適用されます。たとえば、アプリケーションに対して行われたすべてのリクエストのログ記録を有効にすることができます。
ルート固有ミドルウェア
このタイプのミドルウェアは、特定のルートまたはルートのグループにのみ適用されます。これを個々のルート、または同様の動作を共有するルートのグループにアタッチできます。たとえば、ログイン ユーザーを必要とするルートにのみ認証ミドルウェアを適用できます。
ミドルウェア グループ
ミドルウェア グループを使用すると、グループとして一緒に適用できる複数のミドルウェアを定義できます。 Laravel には、Web グループや API グループなど、いくつかのデフォルトのミドルウェア グループが付属しています。これらのグループは、すべての Web リクエストまたは API リクエストにそれぞれ適用されるミドルウェアをバンドルします。
ミドルウェアは、Laravel 開発者にいくつかの利点を提供します。
1.関心事の分離
ミドルウェアは、メインのアプリケーション フローから特定のロジックを分離することで、懸念事項を分離するのに役立ちます。これにより、アプリケーションの役割が個別のレイヤーに分割されるため、アプリケーションの保守と拡張が容易になります。
2.再利用性
ミドルウェアを定義すると、複数のルートおよびアプリケーションにわたって再利用できます。これにより、ミドルウェア ロジックを 1 回だけ作成し、必要なときに適用できるようになります。
3.セキュリティ
ミドルウェアを使用すると、アプリケーションのエントリ ポイントに認証や認可などのセキュリティ関連のロジックを実装でき、不正なリクエストがコア ロジックに到達しないようにできます。
4.カスタマイズ
Laravel ミドルウェアは柔軟でカスタマイズ可能です。リクエストを変更したり、特定の条件に基づいてユーザーをリダイレクトしたり、クライアントに返される前にレスポンスを操作したりするミドルウェアを作成できます。
5.一元的なエラー処理
ミドルウェアを使用すると、エラーと例外を集中管理できます。例外や検証エラーをキャッチし、アプリケーション全体で均一に処理できます。
Laravel 11 では、特にミドルウェアの処理方法において重要な構造上の変更がいくつかありました。 Laravel 11 より前は、すべてのミドルウェア設定は Http カーネル ファイル (app/Http/Kernel.php) で処理されていました。ただし、Laravel 11 では、よりクリーンでよりモジュール化されたアプローチが導入されています。
HTTP カーネルの削除
Laravel 11 では、HTTP カーネルが削除され、ミドルウェアが bootstrap/app.php ファイルで設定されるようになりました。これは、従来の Http カーネル構造に慣れている開発者にとっては大きなパラダイム シフトのように感じるかもしれませんが、ミドルウェアの登録と管理をより効率的で柔軟な方法で行うことができます。
Laravel 11 のデフォルトの bootstrap/app.php ファイルは次のようになります:
<?php return Application::configure() ->withProviders() ->withRouting( web: __DIR__.'/../routes/web.php', // api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', // channels: __DIR__.'/../routes/channels.php', ) ->withMiddleware(function (Middleware $middleware) { // }) ->withExceptions(function (Exceptions $exceptions) { // })->create(); ?>``` **Middleware Management** In Laravel 11, middleware is now handled through the withMiddleware() method, which accepts a callable function. Inside this callable, you can register, modify, or remove middleware. ## 6. How to Create and Use Custom Middleware in Laravel Creating custom middleware in Laravel allows you to extend the default behavior of your application. Here’s how to create and use custom middleware in Laravel: Step 1: Create the Middleware You can create middleware using the Artisan command: php artisan make:middleware CheckAge This command will create a new middleware class in the app/Http/Middleware directory. The newly created CheckAge.php file will look something like this: ```php <?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class CheckAge { /** * Handle an incoming request. */ public function handle(Request $request, Closure $next) { if ($request->age <= 18) { return redirect('home'); } return $next($request); } }?>``` In this example, the CheckAge middleware checks the user's age and redirects them if they are under 18. If the user passes the condition, the request continues to the next layer. **Step 2: Register the Middleware** Since Laravel 11 no longer uses the Http Kernel, you will need to register your middleware in the bootstrap/app.php file. Here’s how you can register your custom middleware: ```php return Application::configure() ->withProviders() ->withRouting( web: __DIR__.'/../routes/web.php', ) ->withMiddleware(function (Middleware $middleware) { $middleware->alias('check.age', \App\Http\Middleware\CheckAge::class); }) ->create();``` Now, your middleware alias check.age is available for use in your routes. Step 3: Apply the Middleware to Routes Once the middleware is registered, you can apply it to routes or route groups: ```php <?php Route::get('/dashboard', function () { // Only accessible if age > 18 })->middleware('check.age');?>``` ## 7. Practical Examples of Using Middleware Middleware can be used for a variety of tasks in Laravel. Let’s look at a few practical use cases. **Example 1: Logging Requests** You can create middleware to log incoming requests to a file or a logging service. This can help you monitor the behavior of your application. ```php <?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Log; use Illuminate\Http\Request; class LogRequest { public function handle(Request $request, Closure $next) { Log::info('Request URL: ' . $request->url()); return $next($request); } }?>``` **Example 2: Checking User Roles** You can use middleware to restrict access based on user roles. For example, only allow access to certain routes if the user has an admin role. ```php <?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; class CheckRole { public function handle($request, Closure $next) { if (Auth::user() && Auth::user()->role != 'admin') { return redirect('/home'); } return $next($request); } }?>``` ## 8. Best Practices for Middleware in Laravel Here are some best practices to follow when working with middleware in Laravel: **1. Keep Middleware Focused** Middleware should be responsible for a single task. If you find that your middleware is doing too much, consider splitting it into smaller, more focused middleware. **2. Use Route-Specific Middleware** Use route-specific middleware when possible. Applying middleware globally can lead to performance overhead and unnecessary checks on routes that don’t need them. **3. Avoid Complex Logic** Middleware should be kept simple. Complex logic or business rules should be handled in the controller
以上がLaravel ミドルウェアを理解する: Laravel の新しいアプローチの詳細の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。