2013-02-05 6 views
3

Я хочу знать, как Laravel загружает класс через фасад.Laravel 4 класс loading и фасады

я наткнулся this answer, который сказал, что DB псевдоним класса/фасад загружен код

здесь /vendor/laravel/framework/src/Illuminate/Database/Connection.php

Я пытался следовать советам, указанным в ответе и после того, что делает код из index.php, но не мог понять, как DB Фасад загрузил класс Connection.

Я также немного смутился, потому что ответ сказал, что класс Connection загружен, но этот класс не имеет метода connection. Тем не менее, говорится в документации, и я был в состоянии использовать метод соединения, как,

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

Я хочу знать, где все это отображается и как произойдет загрузка. Я предполагаю, что композитор автоматизировал сопоставление, но где это происходит, когда мое приложение загружается?

ответ

13

При использовании статического вызова БД Laravel используйте механизм, предоставляемый классом Facade в Illuminate\Support\Facade. Волшебный метод __callStatic вызывается и получает «исходный» класс, который предоставляется DB facade (здесь db).

Строка 54 в Facade.php показывает, что она использует переменную $ app (которая статична и предоставляется в файле Illuminate \ Foundation start.php), чтобы получить объект, зарегистрированный как DB в контейнере App.

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

$ app ['db'] зарегистрировано в the database service provider.

Ах, и вы можете использовать DB, а не Illuminate \ Support \ Facades \ DB, потому что в файле конфигурации приложения создается псевдоним.

Я надеюсь, что это вам поможет :)

+0

спасибо. был пятно на. – kapad