我想知道Laravel如何通过Facades进行类加载。
我遇到this answer说DB
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
我想知道这些映射的位置以及加载是如何发生的。我猜测作曲家已经自动化了映射,但是当我的应用程序启动时它实际发生了什么?
答案 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配置文件中创建了别名。
我希望这会对你有所帮助:)。