Laravel -Fassaden: Ein bequemer Zugang zu Dienstleistungen
Die Fassaden von Laravel bieten eine optimierte Möglichkeit, mit Diensten zu interagieren und den Zugriff über eine benutzerfreundliche Oberfläche zu vereinfachen. Anfangs mag die Fassade -Accessor -Methode verwirrend erscheinen, aber das Verständnis ihrer Rolle verdeutlicht ihren Nutzen. Fassaden fungieren als bequeme Stellvertreter für die zugrunde liegenden Dienste innerhalb von Laravels Service -Container. Das Auffinden des mit einer bestimmten Fassade verknüpften Dienstes ist dank der getFacadeAccessor()
-Methode unkompliziert. Diese Methode gibt den registrierten Dienstnamen zurück.
Zum Beispiel sieht der Accessor der DB
-Fassade so aus:
// Illuminate\Support\Facades\DB; protected static function getFacadeAccessor() { return 'db'; }
Die String 'db'
identifiziert den Dienst innerhalb des von der Fassade verwendeten Containers. Dies kann mit Tinker:
Einige Fassaden können Methodenaufrufe an eine Managerklasse delegieren, was wiederum mit einer Makro- oder Datenbankverbindungsklasse auf niedrigerer Ebene interagiert:
public function __call($method, $parameters) { if (static::hasMacro($method)) { return $this->macroCall($method, $parameters); } return $this->connection()->$method(...$parameters); }
ohne eine angegebene Verbindung, die DatabaseManager
standardmäßig zur konfigurierten Verbindung (z. B. sqlite
im obigen Beispiel).
Die Laravel -Dokumentation enthält umfassende Details zur Fassadenfunktionalität und eine vollständige Liste der verfügbaren Fassaden.
Erstellen benutzerdefinierter Fassaden
Obwohl es für die Anwendungsentwicklung nicht ausschließlich notwendig ist, kann die Erstellung maßgefertigter Fassaden die Produktivität steigern, insbesondere für häufig verwendete Dienstleistungen. Dies ist besonders vorteilhaft, wenn Sie mit Helfern oder in einem dedizierten AppFacades
-Namespace arbeiten. Dieser Ansatz gleicht die Flexibilität von Laravel mit etablierten Konventionen aus.
Um eine Fassade zu generieren, verwenden Sie den Handwerksanweis:
php artisan make:class App/Facades/Example
unter der Annahme, dass Sie einen Dienst AppExampleService
im Dienstanbieter Ihrer Bewerbung definiert haben, wird die Fassade wie folgt implementiert:
namespace App\Facades; use Illuminate\Support\Facades\Facade; class Example extends Facade { protected static function getFacadeAccessor() { return 'example_service'; } }
Alternativ können Sie alternativ, wenn kein Alias definiert ist oder eine Zeichenfolge im Dienstanbieter verwendet, den voll qualifizierten Klassennamen direkt verwenden:
protected static function getFacadeAccessor() { return \App\ExampleService::class; }
Ein wesentlicher Vorteil von Fassaden ist die Leichtigkeit, den zugrunde liegenden Service während des Tests zu verspotten:
use App\Facades\Example; Example::shouldReceive('getLatestPosts') ->with($after_date) ->andReturn($test_posts);
Ohne Fassade bietet Laravel Methoden wie partialMock()
für ähnliche Verspottungsfunktionen:
$mock = $this->partialMock(MyApiService::class, function (MockInterface $mock) { $mock->shouldReceive('getLatestPosts') ->with($after_date) ->andReturn($test_posts); });
letztendlich hängt die Wahl zwischen Fassaden und anderen Methoden von den individuellen Vorlieben und den Projektanforderungen ab. Für häufig zugegriffene Dienste kann eine Fassade jedoch die Lesbarkeit und Wartbarkeit der Code erheblich verbessern, ohne die Vorteile der Abhängigkeitsinjektion zu beeinträchtigen.
Das obige ist der detaillierte Inhalt vonErfahren Sie, wie Sie in Laravel benutzerdefinierte Fassaden erstellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!