Was ist Laravel Pennant
Laravel Pennant ist ein schlankes, einfaches Paket für Feature Flags. Mit Feature Flags können Sie neue Funktionen schrittweise ausrollen, A/B-Tests durchführen oder Trunk-Based Development unterstützen.Was sind Feature Flags
Mit Feature Flags entkoppeln Sie Deployment und Release. Sie können den Code in Produktion deployen und das Feature konfigurativ ein- oder ausschalten.Installation
1
Paket installieren
Installieren Sie Pennant mit Composer.
2
Konfigurationsdatei und Migrationen veröffentlichen
Veröffentlichen Sie die Dateien mit dem Artisan-Befehl Dadurch entstehen
vendor:publish.config/pennant.php und Migrationen unter database/migrations.3
Migrationen ausführen
Legt die Tabelle
features an, in der Pennant die Werte der Feature Flags speichert.Konfiguration
Inconfig/pennant.php legen Sie den verwendeten Storage-Treiber fest. Pennant unterstützt zwei Treiber:
Features definieren
Definition per Closure
Features werden über die Methodedefine der Feature-Fassade definiert – üblicherweise in der boot-Methode eines Service-Providers. Die Closure erhält einen „Scope“ (meist den authentifizierten Benutzer).
- Interne Teammitglieder erhalten das Feature immer.
- Kunden mit hohem Traffic erhalten es nicht.
- Für alle anderen wird es mit 1 % Wahrscheinlichkeit aktiviert.
Wenn die Definition nur eine Lottery zurückgibt, können Sie die Closure weglassen.
Definition als Klasse
Pennant unterstützt auch klassenbasierte Feature-Definitionen. In diesem Fall ist keine Registrierung im Service-Provider erforderlich.app/Features. Implementieren Sie die Methode resolve.
Speichernamen anpassen
Standardmäßig wird der voll qualifizierte Klassenname gespeichert. Mit dem AttributName können Sie den Namen anpassen.
Feature-Prüfung abfangen (Methode before)
In klassenbasierten Features können Sie eine before-Methode definieren. Sie wird vor dem Zugriff auf den Storage im Speicher ausgeführt; gibt sie einen anderen Wert als null zurück, wird dieser verwendet.
Features prüfen
Feature::active() / Feature::inactive()
Mit active prüfen Sie, ob ein Feature aktiv ist. Standardmäßig wird der aktuell authentifizierte Benutzer verwendet.
Bedingte Ausführung (when / unless)
Mit when führen Sie eine Closure nur aus, wenn das Feature aktiv ist.
unless ist die Umkehrung von when; die erste Closure läuft, wenn das Feature inaktiv ist.
Trait HasFeatures
Fügen Sie dem User-Modell das Trait HasFeatures hinzu, können Sie Features direkt am Modell prüfen.
Blade-Direktiven
In Blade können Sie die Direktive@feature verwenden.
Middleware
Mit der MiddlewareEnsureFeaturesAreActive geben Sie an, dass eine Route ein bestimmtes Feature benötigt. Ist das Feature inaktiv, wird 400 Bad Request zurückgegeben.
whenInactive passen Sie die Antwort an.
In-Memory-Cache
Innerhalb eines Requests cached Pennant die Ergebnisse im Speicher. Mehrfache Prüfungen desselben Feature Flags erzeugen keine zusätzlichen DB-Queries. Zum manuellen Leeren des Caches verwenden SieflushCache.
Scopes
Scope festlegen
Standardmäßig ist der authentifizierte Benutzer der Scope. Mitfor können Sie einen beliebigen Scope angeben.
Standard-Scope anpassen
MitFeature::resolveScopeUsing passen Sie den Standard-Scope an.
for der Standard-Scope verwendet.
Nullable Scope
Ist der Scopenull (z. B. bei nicht authentifizierten Routen oder Artisan-Befehlen) und die Feature-Definition kann kein null verarbeiten, wird automatisch false zurückgegeben. Wenn Sie null behandeln möchten, deklarieren Sie den Parameter als nullable.
Rich Feature Values
Features können auch andere Werte als Booleans zurückgeben – etwa um in einem A/B-Test die Buttonfarbe zu steuern.value.
Bei Rich Values gilt jeder Wert außer
false als aktiv.when einen Rich Value, erhält die erste Closure diesen Wert.
Mehrere Features gleichzeitig abrufen
Mitvalues holen Sie mehrere Feature-Werte auf einmal.
all erhalten Sie alle definierten Feature-Werte.
all einzubeziehen, rufen Sie im Service-Provider discover auf.
app/Features registriert.
Eager Loading
Prüfungen in Schleifen können zu Performance-Problemen führen. Mitload laden Sie die Werte vorab.
loadMissing.
Werte aktualisieren
Manuell
Mitactivate und deactivate schalten Sie Features ein bzw. aus.
forget. Bei der nächsten Prüfung wird die Definition neu ausgewertet.
Sammel-Update
MitactivateForEveryone und deactivateForEveryone wenden Sie eine Änderung auf alle Scopes im Storage an.
Features purgen
Wenn ein Feature aus der Anwendung entfernt oder seine Definition geändert wurde, können Sie die Werte aus dem Storage entfernen (purgen).Tests
Features neu definieren
In Tests steuern Sie die Rückgabewerte, indem Sie das Feature perFeature::define neu definieren.
tab=Pest
tab=PHPUnit
tab=Pest
tab=PHPUnit
Test-Store konfigurieren
Über eine Umgebungsvariable inphpunit.xml legen Sie den während Tests verwendeten Store fest.
Eigene Treiber
Wenn die vorhandenen Treiber nicht ausreichen, können Sie einen eigenen Treiber erstellen und dabei das InterfaceLaravel\Pennant\Contracts\Driver implementieren.
boot-Methode eines Service-Providers per extend.
config/pennant.php konfigurieren.
Zusammenfassung
Nächste Schritte
Debugging und Error Handling
Lernen Sie, wie Ihre Anwendung Ausnahmen behandelt und meldet.
Laravel Pulse
Führen Sie ein Performance-Monitoring-Dashboard für Ihre Anwendung ein.