服務提供者和服務容器如何使用 laravel 工作?
已發表: 2022-09-16Laravel 有時即使對於經驗豐富的開發人員來說也很難處理,因為核心功能很難理解。 但確實,Web 開發很有趣。
其中一個功能是它的服務提供者,我將在這篇博客中給出詳細的概述。 我還將在這篇博客中解釋服務容器在 laravel 中是如何工作的。
這些比你想像的要簡單。 話雖如此,讓我們直接進入它。
laravel 中有哪些服務提供者?
Laravel 應用程序中的服務提供者作為引導應用程序的核心點。 因此,提供程序用於將 laravel 的基本服務注入到服務容器中,以及將我們應用程序的服務、類及其依賴項注入到服務容器中。
此示例的提供程序可以在 config/app.php 中以名為“providers”的數組形式找到。 請參考下圖:
假設你想使用任何第三方服務提供者,那麼你必須在服務提供者數組的配置中申請。
您可以看到一些服務提供商已經在那裡運行整個應用程序,例如 Auth,它是應用程序身份驗證所必需的。
如何在 laravel 中創建服務提供者?
要使用服務提供者,您必須首先創建一個。 因此,我們現在將設置一個服務提供商。 您可以使用下面提供的命令來創建您需要的任何服務提供商。
php artisan make:provider MyServiceProvider
當您運行該命令時,將在您的應用程序中創建一個服務提供者,然後您可以使用它。
之後,打開您的應用程序並導航到 providers 文件夾,您將在其中找到您的服務提供商。
在這裡,您將看到兩個方法,register() 和 boot()。
register() 方法
了解 register() 方法允許我們定義與服務容器的綁定這一事實非常重要。 例如,請參見下面的代碼:
$this->app 是 laravel 中的一個全局變量,可以通過應用訪問單例類。
單身人士是一種特質。 當您應用此 trait 時,您是在通知應用程序,在應用程序中作為參數發送的任何類都應該在整個應用程序中只有一個副本(實例)。 這意味著 MyClass 將被解析一次,並且只有一個實例,可以使用 my_class 變量訪問它。
boot() 方法
boot() 方法允許您訪問之前使用 register 方法註冊的所有服務。 因此,您可以使用此方法將整個服務包含到您的應用程序中。

如何註冊服務提供商?
由於您現在已經構建了服務提供程序,因此您需要在配置文件中註冊它以完成該過程。 您必須按照下圖所示的方式在此處註冊:
每次運行應用程序時,所有服務提供者都將首先加載。 服務提供者是 Laravel 應用程序的主要中心,他們總是在那裡幫助你運行完整的應用程序,正如之前在本博客中所討論的那樣。
laravel 中的服務容器是什麼?
Service Container 是一種強大的機制,它允許我們存儲在單個服務器上執行 Laravel 應用程序所需的所有綁定。
應用程序中的所有內容都可以在服務容器的幫助下綁定在一起。
如何在 laravel 中使用服務容器?
考慮以下場景:我們有一個名為 MathService 的類,它負責執行某些基本操作,如加法、乘法等。 下面提供了該類的代碼。
正如您在上面看到的,有兩種方法可以使用數組求和函數計算數字數組的總和,以及使用數組乘積函數將作為數組提供的所有數字相乘。
數組 sum 函數使用數組 sum 函數計算數字數組的總和,而數組乘積函數將作為數組提供的所有數字相乘。
為了使用服務提供者,我們必須首先將服務綁定到服務容器。
然而,通過這樣做,我們指示 Laravel 將 MathService 容器保存在名為 MathService 的容器中,並在我們需要類的實例時返回它。 這是一個類的一次性綁定,它可以用來從我們的程序中獲取任意數量的實例。
如前所述,服務容器和提供者是每個 Laravel 應用程序的關鍵組件。 如前所述,我們可以設計自己獨特的服務提供商,也可以將第三方服務提供商整合到我們的應用程序中。
例如,如果您想在 Laravel 中使用社交名流,您只需將其複制並粘貼到應用服務提供程序文件中,然後在應用程序的任何位置使用它即可。
總結一下
在配置您的應用程序時,會使用服務提供商。 除了服務容器綁定之外,路由、中間件和事件監聽器等其他關鍵元素也在配置文件的這一部分中註冊。
服務提供程序在請求本身被處理之前執行,確保在系統處理請求之前您想要的一切都已到位並設置好。 某些服務提供者的執行定期發生,而其他服務提供者僅在需要時執行(“延遲提供者”)。
當您使用服務容器時,您可以將其用於依賴注入(例如,控制器類中的參數注入)以及綁定和解析類(例如為給定合約實例化的類)。
Web 開發可能是一個艱難的過程。 這就是為什麼 webdew 擁有一支由熟練的 Web 開發人員組成的團隊來幫助製作網站和應用程序並使事情變得更容易的原因。
需要網頁設計和網頁開發方面的幫助嗎? 請與我們聯繫!
編輯:阿姆魯塔