我目前正在学习如何构建laravel框架并进入服务提供商部分。在扩展 ServiceProvider 类的类 DatabaseServiceProvider 中,我看到这行代码:
var intValues = values.Select(value => Convert.ToInt16(value));
var geos = entities.Geos.Where(g => intValues.Contains(g.ACode));
我在$ this-> app中混淆 app 是什么, app 是否是来自应用程序类实例的对象,以及它是否在实例化时实现,因此它可以从 DatabaseServiceProvider 类中使用,因为我没有看到它的实例化过程。以前回答这个新手问题。
答案 0 :(得分:2)
在Laravel中, app 变量是一个服务容器。把它想象成框架的核心。从Facades到DB连接使用的所有内容都存储在那里。
此外,您可以使用指定的方法($this->app->singleton()
)将自己的对象存储在容器中。实际上有许多方法可以与容器进行交互。研究这个的最好方法是查看Laravel的文档(Laravel Service Container)
app 对象正在Laravel引导程序中实例化,因此您无法在服务提供商中看到它。虽然我很好奇,可以深入挖掘框架来找到它。该类本身位于Illuminate\Foundation\Application
中,并在bootstrap/app.php
中实例化。