Skip to main content
Pour les bases, reportez-vous à la page de guide. Cette page présente des patrons pratiques que la documentation officielle ne couvre pas.

Scope par équipe dans un SaaS multi-locataire

Si vous souhaitez gérer les flags à l’échelle de l’équipe (locataire) plutôt qu’à l’échelle de l’utilisateur, changez le scope par défaut vers l’équipe.
Cela suffit pour que Feature::active('billing-v2') cible automatiquement l’équipe courante. Comme tous les membres d’une même équipe obtiennent le même résultat, la cohérence de l’UI est préservée. Exemple de déploiement progressif selon la date d’inscription de l’équipe.
Pour n’activer que certaines équipes (mise à disposition anticipée aux comptes entreprise, par exemple) :

Kill switch d’urgence (méthode before)

Lorsqu’un bug se manifeste en production, vous pouvez désactiver immédiatement une fonctionnalité sans rollback du code. En ajoutant la méthode before à une feature basée sur classe, la vérification est effectuée avant les valeurs stockées.
Il suffit de définir FEATURES_NEW_CHECKOUT_DISABLED=true en variable d’environnement pour arrêter la fonctionnalité sans toucher à la base. C’est un kill switch qui ne demande aucun déploiement.
Si before renvoie null, resolve() est exécuté. Si before renvoie false, la fonctionnalité est considérée immédiatement inactive. En dehors des urgences, renvoyez null.

Rollout planifié

Vous voulez ouvrir automatiquement une fonctionnalité à tous les utilisateurs à une date donnée. Utilisez la méthode before.
Passé le 2025-04-01, la fonctionnalité s’ouvre automatiquement à tous. Pas de déploiement, pas de base, pas de commande Artisan.

Dark launch (mode shadow)

Un patron où la nouvelle logique tourne sur les données de production sans être visible pour l’utilisateur, avec comparaison des résultats à l’ancienne. Si tout va bien, il suffit d’activer le flag pour finaliser la mise en production.
Quand les différences disparaissent des logs, il suffit de basculer le flag vers recommendation-v2.

Collecte des résultats A/B via événements

La documentation officielle mentionne l’événement FeatureRetrieved mais ne montre pas de patron concret d’agrégation A/B. L’événement FeatureResolved est déclenché uniquement à la première résolution d’une feature. Utilisez-le pour enregistrer l’attribution du variant à un utilisateur.
Enregistrez la conversion séparément pour calculer le taux de conversion par variant.
Différence entre FeatureResolved et FeatureRetrieved : FeatureResolved se déclenche uniquement à la première évaluation ; FeatureRetrieved à chaque vérification. Utilisez FeatureResolved pour la trace d’attribution, FeatureRetrieved pour le suivi des pages vues.

Scope dans les jobs en file d’attente

Dans un job de queue, il n’y a pas d’utilisateur authentifié : les vérifications de feature peuvent produire des comportements inattendus. Passez explicitement un scope au job.
Autre approche : évaluer le flag au dispatch et le passer au job.

Interface de gestion via commande Artisan

Une simple commande Artisan permet de manipuler les flags en production sans déploiement.

Refactor sûr d’un nom de feature (attribut Name)

Lorsque vous renommez une feature basée sur classe, le nom stocké en base change et remet à zéro les flags de tous les utilisateurs. Fixez le nom stocké avec l’attribut Name.
Vous pouvez ainsi refactorer librement le nom de la classe tout en préservant les données en base.

Conclusion

Une fois les bases de la documentation officielle maîtrisées, ces patrons révèlent tout le potentiel de Pennant.

Guide Laravel Pennant

Consultez la page de guide pour l’installation et les bases.
Dernière modification le 13 juillet 2026