2013-02-05 83 views
3

我想知道Laravel如何通過Facades進行類加載。Laravel 4 class loading and facades

我碰到this answer是說,DB別名/外觀類加載代碼

這裏/vendor/laravel/framework/src/Illuminate/Database/Connection.php

我試過之後在回答所提出的意見和下面的代碼的index.php做什麼,但來了無法理解DB Facade是如何加載Connection類的。

我也弄糊塗了一些,因爲答案是說Connection類是加載的,但是這個類沒有connection方法。然而,文件說,我已經能夠使用的連接方法類似,

DB::connection('my-connection-name');here's the link to the docs for this

我想知道這是所有映射以及如何加載發生。我猜測作曲家已經使映射自動化了,但是當我的應用程序啓動時它實際發生了什麼?

回答

13

當您使用靜態DB調用Laravel時,請使用Illuminate\Support\Facade中Facade類提供的機制。魔術方法__callStatic被調用並檢索由DB facade(here db)提供的「原始」類。

Facade.php中的第54行顯示它使用$ app變量(這是靜態的並在Illuminate \ Foundation start.php文件中提供)來獲取在App容器中註冊爲數據庫的對象。

return static::$resolvedInstance[$name] = static::$app[$name]; 

$ app ['db']在the database service provider中註冊。

啊,你可以使用數據庫而不是Illuminate \ Support \ Facades \ DB,因爲別名是在應用配置文件中創建的。

我希望這會幫助你:)

+0

謝謝。發現了。 – kapad