【问题标题】:Laravel 4 class loading and facadesLaravel 4 类加载和外观
【发布时间】:2013-01-20 13:29:15
【问题描述】:

我想知道 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

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

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    当你使用静态数据库调用 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,因为在应用配置文件中创建了别名。

    希望对你有帮助:)

    【讨论】:

      猜你喜欢
      • 2013-06-10
      • 1970-01-01
      • 2013-12-17
      • 2013-09-26
      • 2014-01-25
      • 2014-02-17
      • 1970-01-01
      • 2014-05-02
      • 2013-08-25
      相关资源
      最近更新 更多