4

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

我遇到了这个答案,说DB别名/外观类加载了代码

这里/vendor/laravel/framework/src/Illuminate/Database/Connection.php

我尝试遵循答案中给出的建议并遵循 index.php 中的代码,但无法理解DBFacade 是如何加载Connection类的。

我也有些困惑,因为答案说Connection类已加载,但该类没有connection方法。然而文档说,我已经能够使用连接方法,例如,

DB::connection('my-connection-name'); 这是此文档的链接

我想知道这一切都映射在哪里以及加载是如何发生的。我猜作曲家已经自动化了映射,但是当我的应用程序启动时它实际发生在哪里?

4

1 回答 1

14

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

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

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

$app['db'] 在数据库服务提供者中注册。

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

我希望这能帮到您 :)

于 2013-02-05T15:46:22.837 回答