この記事では、Laravelのライフサイクルについて自分なりにまとめてみたものです。Kernel, Middleware, ServiceProvider, Routeも紹介します。Laravelの勉強をする際に、全体像を理解して、アプリケーションのライフサイクルを把握した上で、何かしらのフレームワーク機能を改善したり、ベースになる処理を調査したり時に役に立つと思います。
まずは、アプリへのリクエストのエンドポイントです。それはpublic/index.php
になります。
index.phpでやっている事としては、
bootstrap/app.php
を登録する。次はbootstrap/app.php
について、少しみていきます。
ソースコードを見ると、Exception Handler、Http Kernel、Console Kernelというアプリの核心になるインターフェイスの登録をしていることがわかりました。
Exception Handlerはリクエストの例外などの処理を対応している部分です。これを一旦置いて、ライフサイクルに重要なKernelの部分をみていきたいです。
アプリケーションへのリクエストをHTTP KernelやConsole Kernelに送信します。
app/Http/Kernel.php
になる。HTTPリクエストを対応する。app/Console/Kernel.php
になる。Http Kernelでは、middleware リストを定義します。例えば、 http session, csrf token ...など。
その中に、Routeに関連するミドルウェアリストも定義できます。
続いて、Kernel内に重要なserviceProviderについて、紹介します。
Kernelを起動する際に、サービスプロバイダをロードします。
サービスプロバイダは、アプリケーションフレームワークのコンポーネント(DB、Routing、Validation、Queueなど)を初期起動する役目を持っています。
config/app.php
にはprovider リストを定義します。
プロバイダファイルはApp/Providers/
の配下に管理されている。
ルートに関連するサービスプロバイダはRouteServiceProviderになります。少しみていきます。
ファイル場所はApp/Providers/RouteServiceProvider
になります。
中身処理には、自動的にroutes/web.php
とroutes/api/php
ルート設定をロードしています。
なので、ウェブページはwebで、データを返すのはapiで、それぞれ対応することができます。
関係図としては、public/index.php
-> bootstrap/app.php
-> ServiceProvider -> routes/web.php
とroutes/api/php
。