Das Fassadenmuster vereinfacht komplexe Objektinteraktionen durch Bereitstellung einer einzelnen einheitlichen Schnittstelle. Dieses Tutorial zeigt, wie die Implementierung von Laravel an andere Frameworks anpassen und die Leistung von IOC -Containern nutzt.
Dieser Leitfaden setzt eine grundlegende Vertrautheit mit IOC -Behältern voraus. Wir werden den Fassadenmechanismus von Laravel erkunden und dann zeigen, wie man ihn an anderer Stelle repliziert.
Schlüsselkonzepte:
Facade
verwendet eine $app
Eigenschaft (ein Verweis auf den Dienstcontainer) und die magische Methode __callStatic
, um Methoden auf Containerdiensten dynamisch aufzulösen und aufzurufen. AliasLoader
verwaltet Aliase und rationalisiert den Zugriff auf Fassaden über benutzerdefinierte Namen. Es verwendet spl_autoload_register
, um sich in das Autolading von PHP zu beschäftigen. Laravel -Fassaden im Detail:
Laravel-Fassaden bieten eine statische Schnittstelle zu Containerdiensten. Während der Begriff "Fassade" eine Debatte in der PHP -Community über seine strikte Einhaltung des Designmusters ausgelöst hat, bleibt seine Funktionalität wertvoll.
Zugriff auf einen Dienst direkt vom Container umfasst App::make('some_service')->methodName()
. Eine Fassade vereinfacht dies zu someService::methodName()
.
Jeder Service verfügt über eine entsprechende Fassade, die die Basis von Laravel Facade
erweitert. Die entscheidende Methode lautet getFacadeAccessor()
, die den Containernamen des Dienstes zurückgibt. Die Magie von __callStatic
übernimmt die tatsächliche Serviceauflösung und Methode.
Die Laravel Facade
Klasse:
Die Facade
-Klasse enthält die Containerreferenz ($app
) und implementiert __callStatic
. Wenn eine statische Methode auf eine Fassade aufgerufen wird, ruft __callStatic
den Dienst ab und führt die angeforderte Methode aus. Die getFacadeRoot()
-Methode wird für dieses Service -Abruf verwendet. Eine vereinfachte Version von __callStatic
ist unten gezeigt:
public static function __callStatic($method, $args) { $instance = static::getFacadeRoot(); return call_user_func_array([$instance, $method], $args); }
Fassadenklassenstruktur:
Eine Fassadenklasse erweitert die Basis Facade
und implementiert getFacadeAccessor()
:
<?php namespace App\Facades; use Illuminate\Support\Facades\Facade; class SomeServiceFacade extends Facade { protected static function getFacadeAccessor() { return 'some.service'; } }
Laravels Alias -System:
Laravels config/app.php
enthält einen 'aliases'
Array Mapping -Alias -Namen zu vollständig qualifizierten Klassennamen. Das AliasLoader
iteriert dieses Array und registriert Autoload -Funktionen, um Aliase mit class_alias
zu erstellen. Dies ermöglicht die Verwendung von kurzen Namen wie FancyName
anstelle von AppFacadesSomeServiceFacade
.
Implementieren von Fassaden in anderen Rahmenbedingungen (z. B. silex):
, um den Fassadenansatz von Laravel in Silex (oder einem anderen Rahmen) zu verwenden, folgen Sie folgenden Schritten:
composer require illuminate/support
Facade
und getFacadeAccessor()
.
IlluminateSupportFacadesFacade::setFacadeApplication($app);
AliasLoader
aliases.php
Definieren Sie Ihre Aliase.
AliasLoader
häufig gestellte Fragen (FAQs):
Der vorgesehene FAQS-Abschnitt ist bereits umfassend und gut strukturiert. Es sind keine Änderungen erforderlich.Das obige ist der detaillierte Inhalt vonWie Laravel -Fassaden funktionieren und wie man sie woanders benutzt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!