Der Unterschied zwischen Laravel-Fassadenmodus und Dienstanbieter
Nehmen Sie Laravels eigenes Dateisystem als Beispiel in config Im Provider-Array der Konfigurationsdatei von /app.php ist ein Dienstanbieter registriert:
Illuminate\Filesystem\FilesystemServiceProvider::class,
Eine Fassade ist im Alias-Array definiert:
‘File’ => Illuminate\Support\Facades\File::class,
Durch diese beiden Schritte werden wir Es ist sehr praktisch, die von Laravel bereitgestellten dateisystembezogenen Vorgänge zu verwenden, und das Aufrufformular ist sehr einfach, wie zum Beispiel:
File::exist ($path),判断文件是否存在。 File::get ($path, $lock = false),获取一个文件的内容。 File::append ($path, $data),把内容追加到一个文件末尾。 File::files ($directory),获取一个目录下所有文件。
Wie wird das gemacht? Lassen Sie uns über den Dienstanbieter und den Fassadenmodus von Laravel sprechen.
Dienstanbieter
Schauen wir uns zunächst die Definition an:
Dienstanbieter ist das Zentrum, in dem alle Laravel-Anwendungen gestartet werden. Alle Kerndienste von Laravel, einschließlich Ihrer eigenen Anwendungen, werden über Dienstanbieter gestartet.
Im Dateisystemdienstanbieter kann die Registermethode am Standort /vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php
erkennen, dass ein Singleton gebunden ist:
protected function registerNativeFilesystem() { $this->app->singleton('files', function () { return new Filesystem; }); }
Dieser Singleton ist der Singleton-Modus der Dateisystemklasse. Natürlich kann dieser Dienstleister auch andere Singletons binden oder noch mehr erledigen. Wir untersuchen hier nur das Prinzip der Aufrufmethode File::exist().
Auf diese Weise gibt es eine einzelne Instanz von Dateien, die eigentlich eine Instanz der Filesystem-Klasse ist.
Wenn zu diesem Zeitpunkt keine Fassade vorhanden ist, können Sie auch die Methode der Dateisysteminstanz aufrufen, also wie folgt aufrufen:
app(‘files’)->exist($path)
Okay, jetzt reden wir über die Fassade .
Facade Fassadenmuster
Werfen wir zunächst einen Blick auf die Einleitung:
Facades /fəˈsäd/ stellt eine „statische“ Schnittstelle für verfügbare Klassen zur Verfügung im Servicecontainer der Anwendung. Laravel verfügt über viele Fassaden, über die auf fast alle Dienste zugegriffen werden kann. Laravel-Fassaden sind „statische Proxys“ für Basisklassen im Service-Container. Im Vergleich zu herkömmlichen statischen Methodenaufrufen bieten Fassaden eine einfachere und umfangreichere Syntax und weisen gleichzeitig eine bessere Testbarkeit und Skalierbarkeit auf.
Am Anfang dieses Artikels haben wir erwähnt, dass das Alias-Array eine Datei definiert. Die spezifische Klasse ist
Illuminate\Support\Facades\File::class,
Es gibt tatsächlich a zurück Name Hinweis Ist dieser Dateiname nicht der Name des gerade gebundenen Singleton-Musters? Das ist richtig.
Auf diese Weise können Sie den Dateialias oder die Dateifassade verwenden, um Methoden in dieser Dateisysteminstanz aufzurufen.
Ich hoffe, dass Sie durch diesen Artikel die Beziehung zwischen Dienstanbietern, Facade und Instanzen der tatsächlich aufgerufenen Klassen verstehen können.
Weitere technische Artikel zu Laravel finden Sie in der Spalte
Einführungs-Tutorial zum Laravel-Framework, um mehr darüber zu erfahren!
Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen Laravel-Fassade und Dienstleister. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!