* * * * *
[TOC]
## 介紹
使用「現實世界」中的任何工具時,如果理解這個工具的運作原理,那么你會更加得心應手的使用這個工具。應用開發也是這樣。當你明白你的開發工具如何運行的,你就會對它們的使用游刃有余。
這篇文檔的目的是讓你更好的理解 Laravel 框架如何進行工作及它的工作原理。通過對框架進行全面的了解,一切都不會那么「神奇」,也將會讓你更有自信的構建你的應用。如果你不能理解所有的這些術語,也不要喪失信心!只要對現在提到的東西有個基本概念,隨著對本文檔和其他章節的不斷探索,你對它們的理解會不斷提升。
## 生命周期概述
### 第一件事
一個 Laravel 應用的所有請求的入口都是?`public/index.php`?文件。 通過網頁服務器 (Apache / Nginx) 所有請求都會導向這個文件。?`index.php`?文件沒有太多的代碼,只是加載框架其他部分的一個入口。
`index.php`?文件載入 Composer 生成的自動加載器定義,并從?`bootstrap/app.php`?文件獲取到 Laravel 應用實例。Laravel 的第一個動作就是創建一個自身應用實例 /?[服務容器](服務容器.md)。
### HTTP / Console 內核
接下來,傳入的請求會被發送給 HTTP 內核或者 console 內核,這根據進入應用的請求的類型而定。這兩個內核服務是所有請求都經過的中樞。讓我們現在只關注位于?`app/Http/Kernel.php`?的 HTTP 內核。
HTTP 內核繼承自?`Illuminate\Foundation\Http\Kernel`?類,它定義了一個?`bootstrappers`?數組,數組中的類在請求真正執行前進行前置執行。 這些引導程序配置了錯誤處理,日志記錄,[檢測應用程序環境](配置信息.md),以及其他在請求被處理前需要完成的工作。
HTTP 內核同時定義了一個 HTTP?[中間件](中間件.md)?列表,所有的請求必須在處理前通過這些中間件,這些中間件處理?[HTTP session](Session.md)?的讀寫,判斷應用是否在維護模式,?[驗證 CSRF token](CSRF保護.md)?等等。
HTTP 內核的標志性?`handle`?方法是相當簡單的:接收一個?`Request`?并返回一個?`Response`。你可以把內核想成一個代表你應用的大黑盒子。給它喂 HTTP 請求然后它就會吐給你 HTTP 響應。
#### 服務提供者
在內核引導啟動的過程中最重要的動作之一就是載入?[服務提供者](服務提供者.md)?到你的應用。所有的服務提供者都配置在?`config/app.php`?文件中的?`providers`?數組中。 首先,所有提供者的?`register`?方法會被調用,接下來,一旦所有提供者注冊完成,`boot`?方法將會被調用。
服務提供者負責引導啟動框架的全部各種組件,例如數據庫、隊列、驗證器以及路由組件。因為這些組件引導和配置了框架的各種功能,所以服務提供者是整個 Laravel 啟動過程中最為重要的部分。
#### 分發請求
一旦應用完成引導和所有服務提供者都注冊完成,`Request`?將會移交給路由進行分發。路由將分發請求給一個路由或控制器,同時運行路由指定的中間件。
## 聚焦服務提供者
服務提供者是 Laravel 應用的真正關鍵部分,應用實例被創建后,服務提供者就會被注冊完成,并將請求傳遞給應用進行處理,真的就是這么簡單!
了解 Laravel 是怎樣通過服務提供者構建和引導一個穩定的應用是非常有價值的,當然,應用的默認服務提供者都存放在?`app/Providers`?目錄中。
在新創建的應用中,`AppServiceProvider`?文件中方法實現都是空的。這個提供者是你添加應用專屬的引導和服務的最佳位置,當然的,對于大型應用你可能希望創建幾個服務提供者,每個都具有粒度更精細的引導。
- 前言
- 翻譯說明
- 發行說明
- 升級說明
- 貢獻導引
- 入門指南
- 安裝
- 配置信息
- 文件夾結構
- 請求周期
- 開發環境部署
- Homestead
- Valet
- 核心概念
- 服務容器
- 服務提供者
- Facades
- Contracts
- HTTP層
- 路由
- 中間件
- CSRF 保護
- 控制器
- 請求
- 響應
- 視圖
- Session
- 表單驗證
- 前端
- Blade 模板
- 本地化
- 前端指南
- 編輯資源 Mix
- 安全
- 用戶認證
- Passport OAuth 認證
- 用戶授權
- 加密解密
- 哈希
- 重置密碼
- 綜合話題
- Artisan 命令行
- 廣播系統
- 緩存系統
- 集合
- 錯誤與日志
- 事件系統
- 文件存儲
- 輔助函數
- 郵件發送
- 消息通知
- 擴展包開發
- 隊列
- 任務調度
- 數據庫
- 快速入門
- 查詢構造器
- 分頁
- 數據庫遷移
- 數據填充
- Redis
- Eloquent ORM
- 快速入門
- 模型關聯
- Eloquent 集合
- 修改器
- 序列化
- 測試
- 快速入門
- HTTP 測試
- 瀏覽器測試 Dusk
- 數據庫測試
- 測試模擬器
- 官方擴展包
- Cashier 交易工具包
- Envoy 部署工具
- Scout 全文搜索
- Socialite 社會化登錄