Skip to main content
Zie de gidspagina voor het basisgebruik. Op deze pagina behandelen we praktische patronen die niet in de officiële documentatie staan.

Teamscope in een multi-tenant SaaS

Wil je flags beheren per team (tenant) in plaats van per individuele gebruiker, verander dan de standaardscope naar het team.
Alleen hiermee richt Feature::active('billing-v2') zich automatisch op het huidige team. Welk teamlid het ook is, zolang die tot hetzelfde team behoort komt hetzelfde resultaat terug, waardoor de UI consistent blijft. Een voorbeeld van een gefaseerde rollout op basis van de aanmelddatum van het team.
Wil je alleen specifieke teams activeren (bijvoorbeeld vroege toegang voor enterprise-klanten):

Noodkillswitch (de before-methode benutten)

Wordt er in productie een bug ontdekt, dan kun je de functie direct uitschakelen zonder code terug te draaien. Voeg aan een klassegebaseerde feature een before-methode toe, en die check draait vóór de waarde uit de storage.
Alleen de omgevingsvariabele FEATURES_NEW_CHECKOUT_DISABLED=true instellen is genoeg om de functie te stoppen zonder de database aan te raken. Een killswitch zonder deploy.
Retourneert before null, dan wordt resolve() uitgevoerd. Retourneert hij false, dan wordt de feature direct als inactief behandeld. Retourneer buiten noodgevallen dus null.

Geplande rollouts

Het scenario waarin je op een specifieke datum en tijd automatisch aan alle gebruikers wilt uitrollen. Dit implementeer je met de before-methode.
Hiermee wordt de feature na 2025-04-01 automatisch voor alle gebruikers beschikbaar. Automatisering zonder deploy, zonder database en zonder Artisan-commando.

Dark launch (shadow mode)

Het patroon waarbij je nieuwe logica op productiedata laat draaien zonder die aan gebruikers te tonen, en het resultaat vergelijkt met de oude logica. Zijn er geen problemen, dan is de release compleet door alleen de flag aan te zetten.
Controleer de logs, en zodra er geen verschillen meer zijn, hoef je alleen de flag om te zetten naar recommendation-v2.

A/B-testresultaten verzamelen met events

De officiële documentatie noemt het FeatureRetrieved-event, maar toont geen echte patronen voor A/B-testaggregatie. Het FeatureResolved-event wordt alleen afgevuurd wanneer de waarde van een feature voor het eerst wordt geresolved. Hiermee registreer je de varianttoewijzing van een gebruiker.
Registreer je daarnaast apart wanneer een conversie plaatsvindt, dan kun je de conversieratio per variant aggregeren.
Het verschil tussen FeatureResolved en FeatureRetrieved: FeatureResolved vuurt alleen bij de eerste evaluatie, FeatureRetrieved vuurt bij elke check. Voor het vastleggen van toewijzingen is FeatureResolved geschikt, voor het volgen van paginaweergaven FeatureRetrieved.

Scope in queued jobs

In queue-jobs bestaat er geen geauthenticeerde gebruiker, waardoor featurechecks zich onverwacht kunnen gedragen. Geef de job expliciet een scope mee.
Je kunt de flag ook bij het dispatchen van de job evalueren en aan de job doorgeven.

Een beheer-UI met Artisan-commando’s

Maak je een eenvoudig Artisan-commando om flags te beheren, dan kun je productieflags bedienen zonder deploy.

Featurenamen veilig refactoren (het Name-attribute)

Wanneer je een klassegebaseerde feature hernoemt en de opgeslagen flagnaam in de database verandert, worden de flags van alle gebruikers gereset. Leg de opslagnaam vast met het Name-attribute.
Zo blijven je databasegegevens intact, hoe je de klassenaam ook refactort.

Conclusie

Heb je de basis uit de officiële documentatie onder de knie, dan komt Pennant pas echt tot zijn recht met de volgende patronen.

Laravel Pennant-gids

Zie de gidspagina voor de installatie en het basisgebruik.
Laatst gewijzigd op 6 september 2026