【PHP】Laravel框架的這些你都懂的話,它核心架構基本就懂了

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

首先應該瞭解laravel框架的架構模式(設計核心,laravel 框架是使用服務組件化的開發模式開發的,laravel框架就是由不一樣的服務組件構成的)laravel

laravel 裏面多個服務提供者構成了laravel組件。分層設計:把相同功能的類庫放在同一個文件夾裏面。sql

laravel框架有多個類組成服務,由多個服務組成組件。類 -> 服務 -> 組件shell

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框架是由多個服務組件構成的 -> 服務提供者(最下面的不一樣的服務組件)。

Foundation 的 Application 用來建立服務提供者,建立好以後保存在Container 的 Container 的服務容器裏面,交由他管理,Application 要繼承 Container。

爲了約定服務提供者提供的服務,咱們定義一個規範,這就是契約。

對於咱們的用戶(最上面的用戶)想使用laravel框架,必須經過控制器來使用(上面的Controller),使用laravel框架主要是使用laravel裏面的服務提供者(上面的 new 服務),這樣就是最傳統的開發模式,和服務器容器沒有直接關係,若是laravel這樣設計的話,基本上和其餘框架同樣,沒有任何優點。因此通常不怎麼作。

因爲有契約,契約是服提供者的接口,因此咱們也能夠直接使用契約,new 服務旁邊的黃色線。使用契約用注入的方式,這樣使用的很差之處是若是一個方法裏面使用多個契約的話,咱們就得注入多個契約,這樣代碼看起來不優雅。

因而laravel裏面就出現了門面,門面的出現方便咱們優雅的調用服務器提供者的類。因爲每一個服務提供者的類太長了如:
IlluminateCookieCookieServiceProvider::class,
IlluminateDatabaseDatabaseServiceProvider::class,
因此又引出了別名,使用別名以後 簡化了咱們調用的服務提供者的類。

事件:laravel裏面的模型裏面的事件,好比用戶對數據庫操做時作的一個監聽。對整個項目運行進行監聽,有監聽的動做。相似tp5裏面的鉤子和行爲。

中間件:作用戶的請求作必定的過濾。

點關注,不迷路

好了各位,以上就是這篇文章的所有內容了,能看到這裏的人呀,都是人才。以前說過,PHP方面的技術點不少,也是由於太多了,實在是寫不過來,寫過來了你們也不會看的太多,因此我這裏把它整理成了PDF和文檔,若是有須要的能夠

點擊進入暗號: PHP+「平臺」

在這裏插入圖片描述

在這裏插入圖片描述


更多學習內容能夠訪問【對標大廠】精品PHP架構師教程目錄大全,只要你能看完保證薪資上升一個臺階(持續更新)

以上內容但願幫助到你們,不少PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那裏入手去提高,對此我整理了一些資料,包括但不限於:分佈式架構、高可擴展、高性能、高併發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階乾貨須要的能夠免費分享給你們,須要的能夠加入個人 PHP技術交流羣

相關文章
相關標籤/搜索