Laravel 生命週期(Lifecycle)快速理解

Table of Contents

Table of Contents

本文是對Laravel Lifecycle的內容用自己理解整理而成的筆記,內容包含Kernel, Middleware, ServiceProvider, Route。我想對於學習Laravel的人來說,理解Laravel整體面貌、掌握Laravel的生命週期,將會對Laravel框架上的調整或是調查底層功能時有很大的幫助。

Laravel 生命週期

首先,Laravel應用程式的進入點是public/index.php
index.php中主要做以下三項事。

  1. 確認應用程式是否在維護狀態。
  2. 執行Composer autoload。
  3. 註冊使用bootstrap/app.php

接下來看看bootstrap/app.php有那些重點值得注意。

bootstrap/app.php

從程式碼來看,可以了解它註冊了Exception HandlerHttp KernelConsole Kernel這些應用程式的核心介面。 Exception Handler管理請求發生例外時的處理,這部分日後有機會再談。這裡主要來看看生命週期中的主角Kernel

Kernel

應用程式接收到的請求會根據請求方式向HTTP Kernel或是Console Kernel傳遞。

  • HTTP Kernel: app/Http/Kernel.php。用來處理HTTP請求。
  • Console Kernel: app/Console/Kernel.php。用來處理其他的請求。

Http Kernel中、可以定義middleware 列表。像是 http session, csrf token ...等等。
其中也包含了跟Route相關的Middleware列表。

  • $routeMiddleware: 應用程式的路徑Middleware列表
  • $middlewareGroups: 應用程式的路徑Middleware群列表

接著繼續來談談Kernel中重要的ServiceProvider

ServiceProvider

Kernel啟動後會自行下載套用ServiceProvider
ServiceProvider擔任初始啟動應用程式框架中的元件(DB、Routing、Validation、Queue等)的工作。
provider列表是定義在config/app.php。可以查看有哪些可能被使用的ServiceProvider。
而各個ServiceProvider的程式檔案是在App/Providers/資料夾中保存著。
當中,跟Route相關的ServiceProvider是RouteServiceProvider,接下來看看這裡面有哪些內容。

RouteServiceProvider

程式檔案是App/Providers/RouteServiceProvider
裡面的處理中會自動載入routes/web.phproutes/api/php路徑設定。如此可知,網頁的路徑設定由routes/web.php,而API的路徑設定由routes/api/php來對應處理。

整理

流程大體上是,public/index.php -> bootstrap/app.php -> ServiceProvider -> routes/web.phproutes/api/php

參考資料

laravel.com:Request Lifecycle