Qu’est-ce que Laravel Pennant
Laravel Pennant est un package léger et simple pour les feature flags. Les flags permettent un rollout progressif, des A/B tests et complètent le développement trunk-based.Concept
Les flags séparent déploiement et release : le code est en production, l’activation est contrôlée par configuration.Installation
1
Installer le package
2
Publier config et migrations
config/pennant.php et une migration dans database/migrations.3
Migrer
Crée la table
features où Pennant stocke les valeurs.Configuration
Deux drivers de stockage supportés :Définition de features
Basée sur une closure
UtilisezFeature::define dans un service provider boot. La closure reçoit le « scope » (généralement l’utilisateur authentifié).
- Interne → activé
- Client à fort trafic → désactivé
- Sinon → 1 % de chances
Si la définition retourne juste une loterie, omettez la closure.
Basée sur une classe
Pas d’enregistrement dans un provider.app/Features ; implémentez resolve.
Personnaliser le nom stocké
Par défaut, la classe FQN. Utilisez l’attributName.
Intercepter avec before
Cette méthode s’exécute avant la lecture du stockage : si elle retourne autre chose que null, cette valeur est utilisée.
Vérification
Feature::active() / Feature::inactive()
Cible l’utilisateur authentifié par défaut.
Exécution conditionnelle (when / unless)
unless inverse la logique.
Trait HasFeatures
Ajoutez-le au modèle User pour interroger directement.
Directives Blade
Middleware
EnsureFeaturesAreActive protège une route ; sans le flag, 400 Bad Request.
whenInactive.
Cache en mémoire
Pennant cache les résultats par requête. Vider manuellement :Scopes
Spécifier un scope
Par défaut, l’utilisateur authentifié. Avecfor, n’importe quoi.
Personnaliser le scope par défaut
Scope null
Sans authentification (Artisan, etc.), une définition non typée pournull retourne automatiquement false. Typez avec nullable si vous voulez le gérer :
Valeurs riches
Les flags peuvent retourner autre chose qu’un booléen — par exemple pour un A/B test de couleur.Avec valeurs riches, tout ce qui n’est pas
false est considéré comme actif.when, la valeur est passée à la première closure.
Lecture multiple
values récupère plusieurs valeurs.
all récupère toutes les valeurs définies.
all(), appelez discover dans un provider.
app/Features.
Eager loading
Dans une boucle, les checks entraînent des requêtes. Chargez à l’avance avecload.
loadMissing ne charge que ce qui manque.
Modifier les valeurs
Manuel
activate / deactivate :
forget supprime la valeur stockée ; elle sera recalculée.
En masse
activateForEveryone / deactivateForEveryone s’appliquent à tous les scopes en stock.
Purge
Retirez les valeurs quand vous supprimez ou modifiez une feature.Tests
Redéfinir en test
Dans un test, redéfinissez pour contrôler la valeur.tab=Pest
tab=PHPUnit
tab=Pest
tab=PHPUnit
Store pour les tests
Réglez dansphpunit.xml.
Driver personnalisé
ImplémentezLaravel\Pennant\Contracts\Driver.
extend.
config/pennant.php :
Récapitulatif
Prochaines étapes
Gestion des erreurs
Traitement des exceptions et rapports.
Laravel Pulse
Tableau de bord de performance.