Wat is Laravel Pennant
Laravel Pennant is een eenvoudig en lichtgewicht pakket voor feature flags. Met feature flags kun je nieuwe functionaliteit stapsgewijs uitrollen, A/B-tests uitvoeren en trunk-based development ondersteunen.Wat zijn feature flags
Met feature flags kun je het deployen van code loskoppelen van het releasen. Je kunt de code naar productie deployen en het aan- of uitzetten van functionaliteit via configuratie regelen.Installatie
1
Het pakket installeren
Installeer Pennant met Composer.
2
Configuratiebestand en migraties publiceren
Publiceer de bestanden met het Artisan-commando Hiermee worden
vendor:publish.config/pennant.php en de migratiebestanden in database/migrations aangemaakt.3
De migraties uitvoeren
Maakt de tabel
features aan waarin Pennant de waarden van feature flags opslaat.Configuratie
Inconfig/pennant.php stel je de te gebruiken storagedriver in. Pennant ondersteunt twee drivers.
Features definiëren
Definitie op basis van closures
Features definieer je met dedefine-methode van de Feature-facade. Meestal doe je dit in de boot-methode van een serviceprovider. Aan de closure wordt een “scope” doorgegeven (meestal de geauthenticeerde gebruiker).
- Interne teamleden staan altijd op AAN
- Klanten met veel verkeer staan op UIT
- Voor de rest is de kans 1% dat de feature AAN staat
Als de definitie alleen een Lottery teruggeeft, kun je de closure weglaten.
Definitie op basis van klassen
Pennant ondersteunt ook feature-definities op basis van klassen. Bij klassen is registratie in een serviceprovider niet nodig.app/Features geplaatst. Je hoeft alleen de resolve-methode te implementeren.
De opgeslagen naam aanpassen
Standaard wordt de volledig gekwalificeerde klassenaam opgeslagen. Met hetName-attribuut kun je de naam aanpassen.
Featurechecks onderscheppen (de before-methode)
Aan een klassegebaseerde feature kun je een before-methode toevoegen. Deze methode wordt in het geheugen uitgevoerd vóórdat de waarde uit de storage wordt opgehaald; geeft hij een waarde anders dan null terug, dan wordt die waarde gebruikt.
Features controleren
Feature::active() / Feature::inactive()
Met de active-methode controleer je of een feature actief is. Standaard wordt de check uitgevoerd voor de momenteel geauthenticeerde gebruiker.
Voorwaardelijk uitvoeren (when / unless)
Met de when-methode voer je een closure alleen uit als de feature actief is.
unless is het omgekeerde van when en voert de eerste closure uit als de feature inactief is.
De HasFeatures-trait
Voeg je de HasFeatures-trait toe aan het User-model, dan kun je features rechtstreeks vanuit het model controleren.
Blade-directives
In Blade-templates kun je de@feature-directive gebruiken.
Middleware
Met deEnsureFeaturesAreActive-middleware geef je aan dat toegang tot een route een feature vereist. Is de feature inactief, dan wordt een 400 Bad Request teruggegeven.
whenInactive-methode om de response aan te passen.
In-memory cache
Pennant cachet featureresultaten in het geheugen binnen één request. Zelfs als je dezelfde feature flag meerdere keren controleert, worden er geen extra databasequery’s uitgevoerd. Gebruik deflushCache-methode om de cache handmatig te legen.
Scopes
Een scope opgeven
Standaard is de geauthenticeerde gebruiker de scope, maar met defor-methode kun je een willekeurige scope opgeven.
De standaardscope aanpassen
MetFeature::resolveScopeUsing kun je de standaardscope aanpassen.
for de standaardscope gebruikt.
Nullable scope
Als de scopenull is (niet-geauthenticeerde routes, Artisan-commando’s, enzovoort) en de feature-definitie niet met null overweg kan, wordt automatisch false teruggegeven. Wil je null verwerken, definieer dan met een nullable type.
Rijke featurewaarden
Features kunnen ook andere waarden dan booleans teruggeven. Bijvoorbeeld om de kleur van een knop te bepalen in een A/B-test.value-methode om de waarde op te halen.
Bij rijke waarden wordt elke waarde behalve
false als actief beschouwd.when-methode wordt doorgegeven, ontvangt de eerste closure de waarde.
Meerdere features ophalen
Met devalues-methode haal je de waarden van meerdere features in één keer op.
all-methode haal je de waarden van alle gedefinieerde features op.
all op te nemen, roep je discover aan in een serviceprovider.
app/Features geregistreerd.
Eager loading
Wanneer je featurechecks in een lus uitvoert, kunnen prestatieproblemen ontstaan. Dit los je op door de waarden vooraf op te halen met deload-methode.
loadMissing om alleen nog niet opgehaalde waarden op te halen.
Waarden bijwerken
Handmatig bijwerken
Met de methodesactivate / deactivate schakel je een feature aan of uit.
forget-methode om de opgeslagen waarde te laten vergeten. Bij de volgende check wordt de waarde opnieuw geëvalueerd op basis van de definitie.
Bulksgewijs bijwerken
MetactivateForEveryone / deactivateForEveryone pas je een waarde in één keer toe op alle scopes in de storage.
Features purgen
Als je een feature uit je applicatie verwijdert of de definitie wijzigt, kun je de waarden uit de storage verwijderen (purgen).Testen
Features herdefiniëren
In tests kun je de returnwaarde sturen door de feature opnieuw te definiëren metFeature::define.
tab=Pest
tab=PHPUnit
tab=Pest
tab=PHPUnit
De store voor tests instellen
De store die tijdens tests wordt gebruikt, kun je opgeven via een omgevingsvariabele inphpunit.xml.
Custom drivers
Als de bestaande drivers niet aan je eisen voldoen, kun je een custom driver maken. Je implementeert de interfaceLaravel\Pennant\Contracts\Driver.
extend aan te roepen in de boot-methode van een serviceprovider.
config/pennant.php.
Samenvatting
Volgende stappen
Debuggen en foutafhandeling
Leer hoe exceptions en rapportage in je applicatie werken.
Laravel Pulse
Zet een dashboard op voor het monitoren van de prestaties van je applicatie.