## Laravel框架:原理機制篇

Laravel框架:原理機制篇

在去年的項目裏開始使用Laravel框架和Vue的組合,進行前後端分離,本框架有什麼具體的優點,進行具體分析。

請求週期

Laravel 採用了單一入口模式,應用的所有請求入口都是 public/index.php 文件。

1.註冊類文件自動加載器:Laravel通過composer進行依賴管理,並在bootstrap/autoload.php中註冊了Composer Auto Loader (PSR-4),應用中類的命名空間將被映射到類文件實際路徑,不再需要開發者手動導入各種類文件,而由自動加載器自行導入。

2.創建服務容器:從 bootstrap/app.php 文件中取得 Laravel 應用實例$app(服務容器)

3.創建 HTTP / Console 內核:傳入的請求在HTTP / Console 內核中進行預處理,內核是完成應用引導、請求處理(包括通過Router轉發請求等)的場所。HTTP Kernel 定義了一個 bootstrappers 數組,配置了環境變量加載、應用配置加載、錯誤處理,以及其他在請求被處理前需要完成的工作。

4.載入服務提供者至容器:在內核引導啓動的過程中最重要的動作之一就是載入服務提供者到你的 $app (即所有的服務提供者都要掛載到服務容器下去執行),服務提供者負責引導啓動框架的全部各種組件,例如數據庫、隊列、驗證器以及路由組件。因爲這些組件引導和配置了框架的各種功能,所以服務提供者是整個 Laravel 啓動過程中最爲重要的部分,所有的服務提供者都配置在 config/app.php 文件中的 providers 數組中。首先,所有提供者的 register 方法會被調用;一旦所有提供者註冊完成,接下來,boot 方法將會被調用。

5.分發請求:一旦應用完成引導和所有服務提供者都註冊完成,Request 將會移交給Router進行分發。在通過Router轉發請求時,所有請求都必須先經過全局HTTP中間件棧的處理,再調度到Router並獲得其回調,然後執行該回調。

6.發送響應並結束:由Response發送響應,然後由內核發出terminate,包括調用可終止的中間件(定義了terminate方法的全局HTTP中間件和路由中間件)、 $app 服務容器終止。

服務容器和服務提供者

服務容器是 Laravel 管理類依賴和運行依賴注入的有力工具,在類中可通過 $this->app 來訪問容器,在類之外通過 $app 來訪問容器;服務提供者是 Laravel 應用程序引導啓動的中心,關係到服務提供者自身、事件監聽器、路由的啓動運行。因爲應用程序中註冊的路由通過RouteServiceProvider實例來加載,而事件監聽器在EventServiceProvider類中進行註冊。在新創建的應用中,AppServiceProvider 文件中方法實現都是空的,這個提供者是你添加應用專屬的引導和服務的最佳位置,當然,對於大型應用你可能希望創建幾個服務提供者,每個都具有粒度更精細的引導。服務提供者在 config/app.php 配置文件中的providers數組中進行註冊。

依賴注入

Laravel 實現依賴注入方式有兩種:自動注入和主動註冊。自動注入通過參數類型提示由服務容器自動注入實現;主動註冊則需開發人員通過綁定機制來實現,即綁定服務提供者或類。

參數類型聲明:通過對類的構造器參數類型、類的方法參數類型、閉包的參數類型給出提示來實現。

路由參數依賴:下邊的示例使用 Illuminate\Http\Request 類型提示的同時還獲取到路由參數id。

命令行生成( Artisan Console )

Laravel利用PHP的CLI構建了強大的Console工具artisan,artisan幾乎能夠創建任何你想要的模板類以及管理配置你的應用,在開發和運維管理中扮演着極其重要的角色,artisan是Laravel開發不可或缺的工具。在Laravel根目錄下運行:PHP artisan list可查看所有命令列表。用好artisan能極大地簡化開發工作,並減少錯誤發生;

  • 啓用維護模式:php artisan down --message=‘Upgrading Database’ --retry=60
  • 關閉維護模式:php artisan up
  • 生成路由緩存:php artisan route:cache
  • 清除路由緩存:php artisan route:clear
  • 數據庫遷移 Migrations:php artisan make:migration create_users_table --create=users
  • 創建資源控制器:php artisan make:controller PhotoController --resource --model=Photo
  • 創建模型及遷移:php artisan make:model User -m

事件機制

Laravel事件機制是一種很好的應用解耦方式,因爲一個事件可以擁有多個互不依賴的監聽器。事件類 (Event) 類通常保存在 app/Events 目錄下,而它們的監聽類 (Listener) 類被保存在 app/Listeners 目錄下,使用 Artisan 命令來生成事件和監聽器時他們會被自動創建。

裝載自 https://www.cnblogs.com/XiongMaoMengNan/p/6644892.html,他的博客裏習寫的更爲詳細,但是個人感覺容器、依賴管理、事件機制、命令行生成是和其他框架本質的區別的地方。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章