搜尋
首頁php框架Laravel詳解Laravel框架的核心架構

詳解Laravel框架的核心架構

Feb 22, 2021 pm 01:39 PM
laravel

使用過larave框架的朋友都知道laravel框架裡面除了提供一些基本的功能(如控制器、視圖、模型)之外,還有中間件、門面、契約等,這些東西是如何在laravel框架中運用起來的呢?今天就跟大家詳聊聊。

首先應該了解laravel框架的架構模式(詳解Laravel框架的核心架構設計核心

,laravel 框架是使用服務元件化的開發模式開發的,laravel框架就是由不同的服務元件構成的)


laravel 裡面多個服務提供者構成了laravel元件。分層設計:把相同功能的類別庫放在同一個資料夾裡面。

laravel框架有多個類別組成服務,由多個服務組成元件。

類別 -> 服務 ->  元件laravel使用元件化的開發模式,

多個類別-> 服務-> 元件,多個類別組成服務,多個服務構成組件


多個元件提供不同的服務,然後多個服務構成我們的專案。
請求生命週期

大概的流程如圖:

理論上,生命週期主要有這麼些階段,但其中,開發者大多數只需專注於路由、中間件、控制器、閉包函數、邏輯處理
等幾步
當然,每一步的內部,還是會有更多細化的執行流程,在這裡,一般不深入研究框架或改造框架,很少會細化研究,但研究底層,依舊是學習的好選擇。 詳解Laravel框架的核心架構

服務說的就是提供給你所需要的東西,在laravel裡面所提供的服務有 認證服務、資料庫服務、快取服務、佇列服務等等。 laravel框架所有服務都定義在了
app/config/app.php

裡面

# 
服務提供者#可以提供一組服務的東西就是服務提供者,laravel裡面如上所示其實定義的伺服器提供者,例如

IlluminateAuthAuthServiceProvider::class

,提供認證服務的服務提供者。
IlluminateCacheCacheServiceProvider::class,提供快取服務的服務提供者
好處:開發者可以節省下更多的精力去處理專案邏輯,並且不同開發個體之間能達到一定默契,最重要的是,專案達到分層解耦,業務邏輯只依賴服務,不依賴服務底層的實作。 解耦之後,我們可以任意升級或自訂服務的底層實現,只要確保底層類別實現了該服務

總結:其實服務是一個抽象的概念,伺服器提供者是完成這個抽象概念的具體實施者

服務容器

把所有的服務放在一個盒子裡,存放服務的容器。 laravel裡面的服務容器位於

vendor/laravel/frameworksrcilluminateContainerContainer.php.

Container.php  就是laravel框架的服務容器。

契約

是用來規劃服務提供者的格式、方法、參數等,給服務提供者規範了一定限制。所以在框架裡面所有的契約都是接口,這樣才能規範服務提供者。

門面
門面再一次展示了Laravel在設計上的優秀,它讓Laravel變得更加靈活易擴展,那麼它的概念是:

1 為開發者提供服務容器中服務的靜態代理


2 它對服務存取方式做了補充,之前使用服務必須取得服務的實例,再呼叫服務的方法,但使用facade,就可以直接把服務當靜態物件來呼叫了。 3 config/app.php中服務別名alias大多數都使用了facade

#4 使用facade是有風險的,並不是用的越多越好,這在手冊上有少量的介紹,但具體的,還是需要開發中去發現

laravel框架總體架構圖



詳解Laravel框架的核心架構

#################################################

如上图所示:laravel框架是由多个服务组件构成的 -> 服务提供者(最下面的不同的服务组件)。
FoundationApplication 用来创建服务提供者,创建好之后保存在ContainerContainer 的服务容器里面,交由他管理,Application 要继承 Container
为了约定服务提供者提供的服务,我们定义一个规范,这就是契约

对于我们的用户(最上面的用户)想使用laravel框架,必须通过控制器来使用(上面的Controller),使用laravel框架主要是使用laravel里面的服务提供者(上面的 new 服务),这样就是最传统的开发模式,和服务器容器没有直接关系,如果laravel这样设计的话,基本上和其他框架一样,没有任何优势。所以一般不怎么做。

由于有契约,契约是服提供者的接口,所以我们也可以直接使用契约,new 服务旁边的黄色线。使用契约用注入的方式,这样使用的不好之处是如果一个方法里面使用多个契约的话,我们就得注入多个契约,这样代码看起来不优雅。


于是laravel里面就出现了门面,门面的出现方便我们优雅的调用服务器提供者的类。由于每个服务提供者的类太长了如:

IlluminateCookieCookieServiceProvider::class,IlluminateDatabaseDatabaseServiceProvider::class,

所以又引出了别名,使用别名之后 简化了我们调用的服务提供者的类。

事件:laravel里面的模型里面的事件,比如用户对数据库操作时做的一个监听。对整个项目运行进行监听,有监听的动作。类似tp5里面的钩子和行为。
中间件:做用户的请求做一定的过滤。

以上是詳解Laravel框架的核心架構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:learnku。如有侵權,請聯絡admin@php.cn刪除
Laravel和後端:為Web應用程序提供動力邏輯Laravel和後端:為Web應用程序提供動力邏輯Apr 11, 2025 am 11:29 AM

Laravel是如何在後端邏輯中發揮作用的?它通過路由系統、EloquentORM、認證與授權、事件與監聽器以及性能優化來簡化和增強後端開發。 1.路由系統允許定義URL結構和請求處理邏輯。 2.EloquentORM簡化數據庫交互。 3.認證與授權系統便於用戶管理。 4.事件與監聽器實現松耦合代碼結構。 5.性能優化通過緩存和隊列提高應用效率。

為什麼Laravel如此受歡迎?為什麼Laravel如此受歡迎?Apr 02, 2025 pm 02:16 PM

Laravel受歡迎的原因包括其簡化開發過程、提供愉快的開發環境和豐富的功能。 1)它吸收了RubyonRails的設計理念,結合PHP的靈活性。 2)提供瞭如EloquentORM、Blade模板引擎等工具,提高開發效率。 3)其MVC架構和依賴注入機制使代碼更加模塊化和可測試。 4)提供了強大的調試工具和性能優化方法,如緩存系統和最佳實踐。

django或laravel哪個更好?django或laravel哪個更好?Mar 28, 2025 am 10:41 AM

Django和Laravel都是全棧框架,Django適合Python開發者和復雜業務邏輯,Laravel適合PHP開發者和優雅語法。 1.Django基於Python,遵循“電池齊全”哲學,適合快速開發和高並發。 2.Laravel基於PHP,強調開發者體驗,適合小型到中型項目。

哪個是更好的PHP或Laravel?哪個是更好的PHP或Laravel?Mar 27, 2025 pm 05:31 PM

PHP和Laravel不是直接可比的,因為Laravel是基於PHP的框架。 1.PHP適合小型項目或快速原型開發,因其簡單直接。 2.Laravel適合大型項目或高效開發,因其提供豐富功能和工具,但學習曲線較陡,性能可能不如純PHP。

Laravel是前端還是後端?Laravel是前端還是後端?Mar 27, 2025 pm 05:31 PM

laravelisabackendframeworkbuiltonphp,設計ForweBapplicationDevelopment.itfocusessonserver-sideLogic,databasemagemention和Applicationstructure和CanBeintegratedWithFrontendTechnologiesLikeLikeVue.jsorreActeReacterVue.jsorreActforforfull-stackDevefloct。

如何在Laravel中創建和使用自定義刀片指令?如何在Laravel中創建和使用自定義刀片指令?Mar 17, 2025 pm 02:50 PM

本文討論了Laravel中的創建和使用自定義刀片指令以增強模板。它涵蓋了定義指令,在模板中使用它們,並在大型項目中管理它們,強調了改進的代碼可重複性和R等好處

如何使用Laravel的組件來創建可重複使用的UI元素?如何使用Laravel的組件來創建可重複使用的UI元素?Mar 17, 2025 pm 02:47 PM

本文討論了使用組件在Laravel中創建和自定義可重複使用的UI元素,從而為組織提供最佳實踐並建議增強包裝。

如何使用Laravel的路由功能來創建SEO友好的URL?如何使用Laravel的路由功能來創建SEO友好的URL?Mar 17, 2025 pm 02:43 PM

文章討論了使用Laravel的路由來創建SEO友好的URL,涵蓋最佳實踐,規範的URL和SEO優化工具。WordCount:159

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!