Heim > Artikel > PHP-Framework > Was nützt eine Laravel-Fassade?
In Laravel werden Fassaden verwendet, um eine statische Schnittstelle für die Klassen des IoC-Dienstcontainers bereitzustellen. Die Fassade von Laravel dient im Vergleich zu herkömmlichen statischen Methoden als statischer Proxy Wartung Einfacher testbare Syntax.
Die Betriebsumgebung dieses Tutorials: Windows 10-System, Laravel 6-Version, DELL G3-Computer.
Einführung
Facades bieten eine statische Schnittstelle für die IoC-Service-Containerklasse der Anwendung. Laravel wird mit einigen Fassaden wie Cache usw. geliefert. Die Fassade von Laravel dient als „statischer Proxy“ für die zugrunde liegende Klasse im Servicecontainer und kann im Vergleich zu herkömmlichen statischen Methoden eine einfacher zu testende, flexiblere, präzisere und elegantere Syntax während der Wartung bieten.
Erläuterung
Im Kontext der Laravel-Anwendung ist eine Facade eine Klasse. Mit dieser Klasse können Sie auf ein Objekt aus dem Container zugreifen. Diese Funktion ist in der Facade-Klasse definiert. Laravels Fassaden und alle Fassaden, die Sie selbst definieren, erben die Fassadenklasse.
Ihre Facade-Klasse muss nur eine Methode implementieren: getFacadeAccessor. Was auch immer im Container gelöst werden muss, wird mit dieser Methode erledigt. Die Facade-Basisklasse verwendet die magische Methode __callStatic(), die Aufrufe von Facade an das aufgelöste Objekt verzögern kann.
Wenn Sie also Facade zum Aufrufen wie folgt verwenden: Cache:get, löst Laravel die Cache-Verwaltungsklasse aus dem Ioc-Dienstcontainer auf und ruft dann die get-Methode für diese Klasse auf. Die Fassaden von Laravel können zum Auffinden von Diensten verwendet werden. Dies ist eine bequemere Syntax für die Verwendung des IoC-Dienstcontainers von Laravel.
Vorteile
Facade bietet eine einfache und leicht zu merkende Syntax, die es uns ermöglicht, die von Laravel bereitgestellten Funktionen zu nutzen, ohne uns lange Klassennamen merken zu müssen Dynamische Methoden Durch ihre einzigartige Verwendung sind sie einfach zu testen.
Verwenden Sie tatsächlich das
Beispiel unten, um das Caching-System von Laravel aufzurufen. Schauen Sie sich zunächst die folgende Codezeile an. Möglicherweise denken Sie, dass dies ein direkter Aufruf einer statischen Methode namens get für die Cache-Klasse ist.
$value = Cache::get('key');
Wenn Sie sich jedoch die IlluminateSupportFacadesCache-Klasse ansehen, werden Sie feststellen, dass es überhaupt keine statische Get-Methode gibt:
class Cache extends Facade { /** * Get the registered name of the component. * * @return string */ protected static function getFacadeAccessor() { return 'cache'; } }
Cache Diese Klasse erbt die Facade-Basisklasse, die eine Methode namens getFacadeAccessor() definiert. Beachten Sie, dass diese Methode einen Ioc-Bindungsnamen zurückgibt, hier ist es Cache.
Wenn der Benutzer auf eine statische Methode in der Cache-Fassade verweist, löst Laravel die Cache-Bindung aus dem Ioc-Dienstcontainer auf und führt die angeforderte Methode für das Objekt aus (hier wird diese Methode abgerufen).
Wenn wir also Cache::get aufrufen, bedeutet das in Wirklichkeit Folgendes:
$value = $app->make('cache')->get('key');
Fassaden importieren
Beachten Sie, dass Sie bei Verwendung von Fassade, wenn ein Namespace im Controller verwendet wird, die Facade-Klasse sein müssen in diesen Namensraum importiert. Alle Fassaden befinden sich unter dem globalen Namensraum:
<?php namespace App\Http\Controllers; use Cache; class PhotosController extends Controller { /** * Get all of the application photos. * * @return Response */ public function index() { $photos = Cache::get('photos'); // } }
Fassaden erstellen
Für die Erstellung einer Fassade sind nur drei Dinge erforderlich:
Eine IoC-Bindung.
Eine Fassadenklasse.
Konfiguration eines Fassadenalias.
Nachfolgend definieren wir eine Klasse: PaymentGatewayPayment.
namespace PaymentGateway; class Payment { public function process() { // } }
Wir müssen in der Lage sein, diese Klasse im Ioc-Dienstcontainer aufzulösen. Fügen Sie also zunächst eine Dienstanbieterbindung hinzu:
App::bind('payment', function() { return new \PaymentGateway\Payment; });
Der beste Weg, diese Bindung zu registrieren, besteht darin, einen neuen Dienstanbieter zu erstellen, ihn „PaymentServiceProvider“ zu nennen und ihn dann an die Registermethode zu binden. Anschließend konfigurieren Sie Laravel und laden Ihren Service Provider in die Konfigurationsdatei config/app.php.
Der nächste Schritt besteht darin, Ihre eigene Facade-Klasse zu erstellen:
use Illuminate\Support\Facades\Facade; class Payment extends Facade { protected static function getFacadeAccessor() { return 'payment'; } }
Wenn Sie möchten, können Sie der Facade schließlich einen Alias hinzufügen und ihn in das Aliases-Array in der Konfigurationsdatei config/app.php einfügen.
Sie können die Prozessmethode für eine Instanz der Payment-Klasse aufrufen. So:
Payment::process();
【Verwandte Empfehlung: Laravel-Video-Tutorial】
Das obige ist der detaillierte Inhalt vonWas nützt eine Laravel-Fassade?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!