2016-05-05 214 views
3

我是一個初學者,從laravel 5.2開始,我認爲下面這些概念應該比閱讀文檔更直接。需要了解Laravel核心功能

  • 服務提供商
  • 服務容器
  • 合同
  • 外立面

我覺得一個很好的解釋和例子,可以真正幫助初學者瞭解這4個概念是如何結合在一起的框架。

+0

在Laracasts觀看本系列,並考慮購買傑弗裏午餐!傑弗裏的辦法就是學習laravel你最好的資源。(本系列產品是免費的)https://laracasts.com/series/laravel-5-from-scratch – enriqg9

+0

這不是一個答案的伴侶,但因爲你是一個初學者,你最好一步一步來吧,無論如何,我喜歡這個問題!因爲我知道如何使用這些東西,但我不知道它們是什麼以及它們是如何工作的,傑弗裏做了一件很好的工作,檢查了laracasts –

回答

4

服務提供商: 所謂的服務提供商是您的Laravel應用程序的心跳。它們是初始化過程的核心元素,所有相關和必需的代碼都由PHP加載。這包括框架本身的所有要素,還包括您需要加載的任何自定義代碼。

控制反轉,或IOC: 不能伊斯利解釋(我只有這個IM一些想法不是親)

外牆:

Facade模式是軟件設計模式經常用於面向對象的編程。實際上,Facade是一個包裝複雜庫的類,它爲它提供了一個更簡單,更易讀的界面。 Facade模式也可用於爲一組複雜且設計不佳的API提供統一且設計良好的API。

enter image description here Laravel facade是一個類,它爲容器內的服務提供類似靜態的接口。根據文檔,這些外觀用作訪問容器服務底層實現的代理。

MORE

合同: LARACASTS FREE VIDEO

我知道這是不夠的!你問是複雜的東西一個單一的答案可能是不夠的

+0

是的。這還不夠,但你已經給了他一個很好的啓動。 –

+0

是的,我認爲理解這些東西是必不可少的!人們必須瞭解他們正在使用的是什麼 –

3

好了,我第一次與laracasts是一個驚人的資源的人,才能夠真正進入更詳細,打破下來的東西很簡單的同意。

如此說來,在簡要概述如下:

服務容器(IoC容器)是laravel芯的過程,可與它們的依賴正常加載對象。舉例來說,如果我有一個控制器的方法是這樣的:

public function update(Request $request, $id) 
{ 
    ... 
} 

IoC容器是足夠聰明的解析請求,並加載了請求類相關聯,以確保它得到正確的實例化的依賴關係。

它還允許你實例化類,而不必沿着所有的依賴完全轉嫁給如下:

class ProductRepo(Product $product) 
{ 
    public function get($id) 
    { 
     ... 
    } 
} 

我可以引用這個類,而不依賴注入加載它,如下所示:(確保傳遞完整的命名空間)

app('App\ProductRepo')->get($id); 

這讓我沒有在產品對象通過,Laravel是足夠聰明,解決產品的對象,因爲IoC容器是做幕後的神奇。

服務提供商是一個讓您在引導或實例化類時自定義行爲的地方。例如,Laravel默認使用一個名爲EventServiceProvider的類。此課程的任務是在Laravel中配置Event系統,以確保包含您創建的所有自定義事件偵聽器。所以如果我想確保EventDispatcher被加載時,它會帶來所有必要的依賴關係。

合同真的很簡單。它們只是暗示接口的php面向對象的概念。這個概念指出有些類可以建立規則。例如:

interface SearchableInterface 
{ 
    public function search($data); 
} 

class BinarySearch implements SearchableInterface 
{ 
    public function search($data) 
    { 
     ... 
    } 
} 

這說明了實現SearchableInterface任何類,必須有一個功能搜索條件的接受一個參數。這創建了一個'契約',任何實現SearchableInterface的類都必須具有此函數,否則應用程序將拋出錯誤。

這對於使用互換件(兄弟姐妹)而言並不必擔心課程缺少您需要的功能。

最後但並非最不重要的是門面。我喜歡門面。簡而言之,所有這些工作都是創建一個沒有靜態定義的類的靜態表示。所以我們可以說我有一個能從S3獲得文檔的類。

class S3 
{ 
    public function get($file) 
    { 
     ... 
    } 
} 

如果沒有外觀,您首先必須實例化,然後調用get類來獲得S3中的某些東西。

$s3 = new S3; 
$s3->get('myAwesomeFile'); 

Laravel允許您輕鬆註冊Facades,以便您可以使用此靜態方式進行讀取和方便。

S3::get('MyAwesomeFile'); 

所有這一切都得到了每一個概念的過於簡單化,但進入的一些每一個概念的基本的一些細節。希望這可以幫助!