4

LaravelがFacadesを介してクラスをロードする方法を知りたいです。

エイリアス/ファサードクラスがコードをロードしたというこの回答に出くわしましたDB

ここ/vendor/laravel/framework/src/Illuminate/Database/Connection.php

回答で与えられたアドバイスに従い、index.php からのコードの動作に従ってみましたが、Facade がどのようにクラスDBをロードしたかを理解できませんでした。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'] はデータベース サービス プロバイダーに登録されています。

ああ、あなたは Illuminate\Support\Facades\DB ではなく DB を使用できます。これは、アプリの構成ファイルにエイリアスが作成されているためです。

これがお役に立てば幸いです:)

于 2013-02-05T15:46:22.837 に答える