# Laravel - Request Lifecycle 請求的生命週期 https://laravel.com/docs/8.x/lifecycle # 第一步 - 進入點是 `public/index.php` - 所有請求會直接進入 `public/index.php` 經由你的server (apache nginx) - index.php - 載入 composer 建立 autoloader - 取得所有 instance 從 `bootstrap/app.php` - 第一個 instance 是 service container # HTTP/終端核心 - 下一步是將進來的 request 送到 HTTP kernel 或者 console kernel (基於 request 的種類),這兩個 kernel 是具有中心地位的 - HTTP kernel (`app/Http/Kernel.php`) - HTTP kernel 繼承 `Illuminate\Foundation\Http\Kernel ` 它定義了一個 bootstrappers 陣列是會在 request 被執行之前跑得 - 這些 bootstrappers - 配置 - error handling - logging - detect the application environment - 與其它任務是 request 真的被執行之前需要做的 - 事實上是內部的 Laravel 配置 - 定義一系列 middleware (所有的 request 必定通過) - 讀取和寫入 HTTP session - 決定 application 是否在維護模式 - 辨識 csrf token - HTTP kernel 的簽章方法是 handle ,它接收 request 回傳 response # Service Providers - 最重要的 kernel bootstrapping actions - 所有的 service providers 配置設定放在 `config/app.php` - laravel 會疊代所有這些 providers 和 初始化它們,初始化後 providers 後, register 方法就會被呼叫,當所有的 providers 被註冊後,boot 方法就會被每個 provider 呼叫 - Service Providers 的職責是 初始化所有 framework 的 components - database - queue - validation - routing - 基本上所有的主要 feature 都是 bootstrapped and configured by a service provider # Routing - 其中一個最重要的 service providers 是 `App\Providers\RouteServiceProvider` - 載入 route files (routes directory ) - 當所有的 sevice providers 被 register 後,Request 將會給 router 做 dispatching - router 會 dispatch request 到 route 或 controller 與跑任何特定的 middleware - 當 request 通過所有 middleware 後 method 就會被執行且會被回傳 # Finishing Up - 當 route or controller method 回傳 response ,response 會回到 route's middleware,給 application 一個機會去修正或驗證回傳的response - 最後當回傳到 middleware 後,HTTP kernel的 handle method 會回傳 response 物件且 index.php 會呼叫 send method 在回傳的 response 上,send method 傳送response content 給 user web browser,這就是整個laravel 的request life cycle # Focus On Service Providers - 預設的 service provider 是放在 `app/Providers` 目錄 - 預設上 AppServiceProvider 是空的,它可以增加你自己 application's 的bootstrapping和 sevice container bindings ###### tags: `2021` `草稿` `laravel` {%hackmd BJrTq20hE %}
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up