# 請求的生命周期
- [簡介](#introduction)
- [生命周期概述](#lifecycle-overview)
- [聚焦服務提供器](#focus-on-service-providers)
<a name="introduction"></a>
## 簡介
在日常生活中使用任何工具時,如果理解了該工具的工作原理,使用時能更加運用自如。這對于應用開發來說也一樣,當你能真正懂得一個功能背后實現原理時,你就離成為大神不遠了。
文檔存在目的是為了讓你更加清晰地了解 Laravel 框架是如何工作。通過更好地了解整個框架,讓一切都不再感覺很「神奇」。相信我,這有助于你更加清楚自己在做什么,對自己想做的事情更加胸有成竹。就算你不明白所有的術語,也不用因此失去信心!只要多一點嘗試、學著如何運用,隨著你瀏覽文檔的其他部分,你的知識一定會因此增長。
<a name="lifecycle-overview"></a>
## 生命周期概述
### 開始
`public/index.php` 文件是所有對 Laravel 應用程序的請求的入口點。而所有的請求都是經由你的 Web 服務器(Apache/Nginx)通過配置引導到這個文件。`index.php` 文件不包含太多的代碼,卻是加載框架的起點。
`index.php` 文件加載 Composer 生成定義的自動加載器,然后從 `bootstrap/app.php` 腳本中檢索 Laravel 應用程序的實例。Laravel 本身采取的第一個動作是創建一個 application/ [service container](/docs/{{version}}/container) 的實例。
### HTTP/控制器內核
接下來,根據進入應用程序的請求類型來將傳入的請求發送到 HTTP 內核或控制臺內核。而這兩個內核是用來作為所有請求都要通過的中心位置。現在,我們先看看位于 `app/Http/Kernel.php` 中的 HTTP 內核。
HTTP 內核繼承了 `Illuminate\Foundation\Http\Kernel` 類,它定義了在執行請求之前運行的 `bootstrappers` 數組。這個數組負責在實際處理請求之前完成這些內容:配置錯誤處理、配置日志記錄、[檢測應用程序環境](/docs/{{version}}/configuration#environment-configuration) 以及執行其他需要完成的任務。
HTTP 內核還定義了所有請求被應用程序處理之前必須經過的 HTTP 中間件的列表。這些中間件處理 [HTTP 會話](/docs/{{version}}/session) 的讀寫、確定應用程序是否處于維護模式、[驗證 CSRF 令牌](/docs/{{version}}/csrf)等。
HTTP 內核的 `handle` 方法的方法簽名非常簡單:接收 `Request` 并返回 `Response`。可以把內核當作是代表整個應用程序的大黑盒,給它 HTTP 請求,它就返回 HTTP 響應。
#### 服務提供器
最重要的內核引導操作之一是加載應用程序的 [服務提供器](/docs/{{version}}/providers)。應用程序的所有服務提供器都在 `config/app.php` 配置文件的 `providers` 數組中配置。首先,所有提供器都會調用 `register` 方法,接著,由 `boot` 方法負責調用所有被注冊提供器。
服務提供器負責引導所有框架的各種組件,如數據庫、隊列、驗證和路由組件。也就是說,框架提供的每個功能都它們來引導并配置。因此也可以說,服務提供器是整個 Laravel 引導過程中最重要的方面。
#### 分配請求
一旦引導了應用程序且注冊所有服務提供器,`Request` 請求就會被轉交給路由器來進行調度。路由器將請求發送到路由或控制器或任何運行于路由的特定中間件。
<a name="focus-on-service-providers"></a>
## 聚焦服務提供器
服務提供器是引導 Laravel 應用程序真正的關鍵。創建應用程序實例、注冊服務提供器,并將請求交給被引導的應用程序。就是這么簡單~
牢牢掌握 Laravel 應用程序如何通過服務提供器來構建和引導是非常有價值的。應用程序的默認服務提供器存儲在 `app/Providers` 目錄中。
默認情況下,`AppServiceProvider` 沒什么內容。這個提供器是用來添加自定義的應用程序引導和服務容器綁定。對于大型應用程序來說,可以創建幾個服務提供器,讓每個服務提供器都具有更精細的引導類型。
## 譯者署名
| 用戶名 | 頭像 | 職能 | 簽名 |
|---|---|---|---|
| [@JokerLinly](https://laravel-china.org/users/5350) | <img class="avatar-66 rm-style" src="https://dn-phphub.qbox.me/uploads/avatars/5350_1481857380.jpg"> | 翻譯 | Stay Hungry. Stay Foolish. |
---
> {note} 歡迎任何形式的轉載,但請務必注明出處,尊重他人勞動共創開源社區。
>
> 轉載請注明:本文檔由 Laravel China 社區 [laravel-china.org](https://laravel-china.org) 組織翻譯,詳見 [翻譯召集帖](https://laravel-china.org/topics/5756/laravel-55-document-translation-call-come-and-join-the-translation)。
>
> 文檔永久地址: https://d.laravel-china.org
- 說明
- 翻譯說明
- 發行說明
- 升級說明
- 貢獻導引
- 入門指南
- 安裝
- 配置信息
- 文件夾結構
- HomeStead
- Valet
- 核心架構
- 請求周期
- 服務容器
- 服務提供者
- 門面(Facades)
- Contracts
- 基礎功能
- 路由
- 中間件
- CSRF 保護
- 控制器
- 請求
- 響應
- 視圖
- 重定向
- Session
- 表單驗證
- 錯誤與日志
- 前端開發
- Blade 模板
- 本地化
- 前端指南
- 編輯資源 Mix
- 安全
- 用戶認證
- API認證
- 用戶授權
- 加密解密
- 哈希
- 重置密碼
- 綜合話題
- Artisan 命令行
- 廣播系統
- 緩存系統
- 集合
- 事件系統
- 文件存儲
- 輔助函數
- 郵件發送
- 消息通知
- 擴展包開發
- 隊列
- 任務調度
- 數據庫
- 快速入門
- 查詢構造器
- 分頁
- 數據庫遷移
- 數據填充
- Redis
- Eloquent ORM
- 快速入門
- 模型關聯
- Eloquent 集合
- 修改器
- API 資源
- 序列化
- 測試
- 快速入門
- HTTP 測試
- 瀏覽器測試 Dusk
- 數據庫測試
- 測試模擬器
- 官方擴展包
- Cashier 交易工具包
- Envoy 部署工具
- Horizon
- Passport OAuth 認證
- Scout 全文搜索
- Socialite 社交化登錄
- 交流說明