私たちが現実世界でツールを使用するとき、その動作原理を理解していれば使いやすくなります。アプリケーション開発の場合は true。開発ツールがどのように機能するかを理解すると、より快適に使用できるようになります。
このドキュメントの目的は、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 カーネルは、ブートストラップの配列を定義する IlluminateFoundationHttpKernel クラスを継承します。これらのブートストラップは、リクエストが実行される前に実行され、エラー処理、ロギング、アプリケーション環境の検出が行われます。リクエストの実行時に、処理前に実行する必要があるその他の機能。
HTTP コアは、すべてのリクエストが処理する前に通過する必要がある一連の HTTP ミドルウェアも定義します。これらのミドルウェアは、HTTP セッションの読み取りと書き込み、アプリケーションがメンテナンス モードであるかどうかの判断、CSRF トークンの検証などを処理します。
HTTP カーネルの象徴的なメソッドであるハンドル処理のロジックは非常に単純です。リクエストを取得し、レスポンスを返します。カーネルをアプリケーション全体を表す大きなブラック ボックスとして想像し、HTTP リクエストを入力し、そしてHTTPレスポンスを返します。
カーネル起動プロセス中の最も重要なアクションの 1 つは、アプリケーションのサービス プロバイダーをロードすることです。アプリケーションのすべてのサービス プロバイダーは、config/app.php で構成されます。ファイルのプロバイダー配列。まず、すべてのプロバイダの register メソッドが呼び出され、すべてのプロバイダが登録された後、boot メソッドが呼び出されます。
サービス プロバイダーは、データベース、キュー、バリデーター、ルーティング コンポーネントなど、フレームワークのさまざまなコンポーネントをすべて開始する責任があります。サービス プロバイダーは、フレームワークによって提供されるすべての機能を開始して構成するためです。プロバイダー これは、Laravel 起動プロセス全体の最も重要な部分です。
アプリケーションが開始され、すべてのサービスプロバイダーが登録されると、リクエストは配信のためにルーターに渡され、ルーターはリクエストをルートまたはコントローラーに配信します。 、すべてのルートで指定されたミドルウェアを実行している間。
サービスプロバイダーは、Laravel アプリケーションを開始する際の最も重要な部分です。アプリケーションインスタンスが作成された後、サービスプロバイダーが登録され、リクエストが渡されます。プロセス全体を適用するだけです。
サービスプロバイダーを使用して Laravel アプリケーションがどのように構築され、起動されるかをしっかりと把握することは非常に有益です。もちろん、アプリケーションのデフォルトのサービスプロバイダーは app/Providers ディレクトリに保存されます。
デフォルトでは、AppServiceProvider は空です。これは、カスタム スタートアップおよびサービス コンテナー バインディングを追加するのに最適な場所です。もちろん、大規模なアプリケーションの場合は、それぞれがより詳細なサービス プロバイダーを作成することもできます。起動する。