Laravel 4级装载和外墙

时间:2013-02-05 15:08:23

标签: php laravel laravel-4

我想知道Laravel如何通过Facades进行类加载。

我遇到this answerDB alias / facade类加载了代码

此处/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

我想知道这些映射的位置以及加载是如何发生的。我猜测作曲家已经自动化了映射,但是当我的应用程序启动时它实际发生了什么?

1 个答案:

答案 0 :(得分:13)

当您使用静态数据库调用时,Laravel使用Illuminate\Support\Facade中Facade类提供的机制。调用魔术方法__callStatic并检索由DB facade(此处为db)提供的“原始”类。

Facade.php中的第54行显示它使用$ app变量(它是静态的并在Illuminate \ Foundation start.php文件中提供)来获取在App容器中注册为DB的对象。

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

$ app ['db']已在the database service provider注册。

啊,你可以使用DB而不是Illuminate \ Support \ Facades \ DB,因为在app配置文件中创建了别名。

我希望这会对你有所帮助:)。