リクエストサイクル
- ##はじめに
- 「日常生活」で道具を使うとき、その道具の動作原理を理解していれば。そうすればもっと便利に使えますよ。アプリケーション開発でも同様で、機能の実装原理をしっかり理解できれば、より使いやすく便利になります。 このドキュメントの目的は、Laravel フレームワークがどのように機能するかをより明確に理解していただくことです。フレームワークを通じて全体的なビューを取得すると、すべてが「魔法のように」感じられなくなります。信じてください、これはあなたが自分が何をしているのかをより認識し、自分がやりたいことに対してより自信を持つのに役立ちます。用語がすべて理解できなくても、自信を失わないでください。少し試して、その使用方法を学ぶだけで、ドキュメントの他の部分に進むにつれて知識が確実に増えます。
まず第一に
Laravelアプリケーションのすべてのリクエストエントリは、public/index.php
ファイルです。すべてのリクエストは、設定を通じて Web サーバー (Apache/Nginx) 経由でこのファイルに送信されます。 index.php
このファイルには多くのコードはありませんが、フレームワークの残りの部分を読み込むための開始点となります。
index.php
ファイルは、Composer によって生成された自動ロード設定をロードし、bootstrap/app.php
スクリプトから Laravel アプリケーションのインスタンスを取得します。 Laravel 自体によって実行される最初のアクションは、アプリケーション/サービス コンテナーを作成することです。
HTTP/コンソール カーネル
次に、アプリケーションに受信するリクエストの種類に応じて、受信リクエストが HTTP カーネルまたはコンソール カーネルに送信されます。これら 2 つのコアは、すべてのリクエストが通過する中心的な場所として使用されます。次に、app/Http/Kernel.php
にある HTTP カーネルを見てみましょう。
HTTP カーネルは、bootstrappers
の配列を定義する Illuminate\Foundation\Http\Kernel
クラスを継承します。この配列のクラスは、リクエストが実行される前に実行され、これらのブートストラップは、エラー処理、ログ記録、アプリケーション環境のチェック、およびリクエストが処理される前に実行する必要があるその他のタスクを構成します。
HTTP コアは、アプリケーションによって処理される前にすべてのリクエストが通過する必要がある HTTP ミドルウェアも定義します。これらのミドルウェアは、HTTP セッションの読み取りと書き込みを処理し、アプリケーションがメンテナンス モードであるかどうかを判断し、CSRF トークンを検証します。
HTTP コアの handle
メソッド シグネチャは非常に単純です。Request
を取得し、Response
を返します。このカーネルは、HTTP リクエストを受け取り、HTTP レスポンスを返す、アプリケーション全体を表す大きなブラック ボックスであると考えてください。
サービス プロバイダー
カーネルの起動操作で最も重要なことは、適用するサービス プロバイダーです。すべてのアプリケーションのサービス プロバイダーは、config/app.php
構成ファイルの providers
配列で構成されます。最初のステップでは、すべてのサービス プロバイダーの register
メソッドが呼び出され、すべてのサービス プロバイダーが登録されると、boot
メソッドが呼び出されます。
サービス プロバイダーを使用すると、フレームワークでデータベース、キュー、バリデーター、ルーティング コンポーネントなどのさまざまなコンポーネントを開くことができます。サービスプロバイダーが開始されている限り、フレームワークのすべての機能を制御できるため、サービスプロバイダーはLaravelのブートサイクル全体の最も重要な部分でもあります。
リクエスト スケジューリング
開始され、すべてのサービス プロバイダーが登録されると、リクエスト
がルーターに配信されます。ルーターは、バインドされたルートまたはコントローラー、そしてもちろんルートバインドのミドルウェアにリクエストをディスパッチします。
サービスプロバイダーに注目
サービスプロバイダーは、Laravel の真のライフサイクルの鍵です。アプリケーション インスタンスが作成されると、サービス プロバイダーが登録され、起動されたアプリケーションによって引き継がれることが要求されます。単純にする!
サービスプロバイダーがどのように構築され、サービスプロバイダーがLaravelアプリケーションとどのように連携するかをしっかりと把握することは非常に価値があります。もちろん、アプリケーションのデフォルトのサービスプロバイダーは app/Providers
に保存されます。
デフォルトでは、AppServiceProvider
は空白です。このプロバイダーは、アプリケーション独自のブートストラップ処理とサービス コンテナー バインディングを追加するのに適しています。もちろん、大規模なプロジェクトでは、よりきめ細かいサービス プロバイダーをいくつか作成することができます。