首頁  >  文章  >  php框架  >  詳解Laravel框架的核心架構

詳解Laravel框架的核心架構

藏色散人
藏色散人轉載
2021-02-22 13:39:044318瀏覽

使用過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.com。如有侵權,請聯絡admin@php.cn刪除