Diese PHP-Bibliothek implementiert eine Infrastruktur zum Umschalten von Funktionen.
Die Verwendung trompette/feature-toggles Bibliothek kann einem Team dabei helfen, Benutzern iterativ und sicher neue Funktionen bereitzustellen, mit anderen Worten: Sie ermöglicht eine kontinuierliche Bereitstellung.
Weitere Informationen zu diesem Thema finden Sie unter Feature Toggles (auch bekannt als Feature Flags) auf MartinFowler.com.
Die trompette/feature-toggles Bibliothek wird auf Packagist verteilt.
Es kann mit dem folgenden Befehl als Projektabhängigkeit hinzugefügt werden:
composer require trompette/feature-togglesWenn Sie an einer neuen Version einer Seite arbeiten, kann die schrittweise Bereitstellung der neuen Version einem Team viel Selbstvertrauen geben.
Es bringt aber auch mehr Arbeit mit sich, da das Team Folgendes tun muss:
Bei trompette/feature-toggles Bibliothek erfolgt die Aktivierung der neuen Version, indem der Toggle-Router gefragt wird, ob der aktuelle Benutzer über eine Funktion verfügt:
if ( $ toggleRouter -> hasFeature ( $ currentUser , ' new_page_version ' )) {
$ templating -> render ( ' new_page.tpl ' , $ newParameters );
} else {
$ templating -> render ( ' page.tpl ' , $ parameters );
} Bevor Sie den Toggle-Router verwenden, muss die Funktion new_page_version registriert werden:
use Trompette FeatureToggles FeatureDefinition ;
use Trompette FeatureToggles FeatureRegistry ;
$ featureRegistry = new FeatureRegistry ();
$ featureRegistry -> register ( new FeatureDefinition (
$ name = ' new_page_version ' ,
$ description = ' awesome new version of a page ' ,
$ strategy = ' whitelist '
));Beim Definieren eines Features muss auf eine Umschaltstrategie verwiesen werden, um den Algorithmus anzugeben, der entscheidet, ob ein Ziel über ein Feature verfügt.
Umgesetzte Strategien sind:
OnOff -Klasse.Whitelist -Klasse.Percentage . Und Strategien können mit booleschen Operatoren kombiniert werden, etwa so: onoff and whitelist , onoff or whitelist or percentage usw.
Nachdem die Funktionsregistrierung nun konfiguriert ist, kann der Toggle-Router erstellt werden:
use Doctrine DBAL Connection ;
use Trompette FeatureToggles DBAL WhitelistStrategyConfigurationRepository ;
use Trompette FeatureToggles ToggleRouter ;
use Trompette FeatureToggles WhitelistStrategy Whitelist ;
$ connection = new Connection (...);
$ repository = new WhitelistStrategyConfigurationRepository ( $ connection );
$ whitelist = new Whitelist ( $ repository );
$ toggleRouter = new ToggleRouter (
$ featureRegistry ,
$ strategies = [ ' whitelist ' => $ whitelist ]
);Strategien werden als mit Namen indiziertes Array eingefügt: Dies sind die Referenzen, die bei der Registrierung von Features verwendet werden sollten.
Mit dem Toggle-Router kann eine Funktion für eine bestimmte Strategie konfiguriert werden:
$ toggleRouter -> configureFeature ( ' feature ' , ' onoff ' , ' on ' );
$ toggleRouter -> configureFeature ( ' feature ' , ' onoff ' , ' off ' );
$ toggleRouter -> configureFeature ( ' feature ' , ' whitelist ' , ' allow ' , ' target ' );
$ toggleRouter -> configureFeature ( ' feature ' , ' whitelist ' , ' disallow ' , ' target ' );
$ toggleRouter -> configureFeature ( ' feature ' , ' percentage ' , ' slide ' , 25 );
$ toggleRouter -> configureFeature ( ' feature ' , ' percentage ' , ' slide ' , 50 );Konfigurationsänderungen werden beibehalten, indem die zugehörige Methode auf der Strategieinstanz aufgerufen wird.
Alle DBAL-Konfigurationsrepositorys von Doctrine können ein Schema migrieren, da sie alle die SchemaMigrator Schnittstelle implementieren:
use Doctrine DBAL Connection ;
use Trompette FeatureToggles DBAL WhitelistStrategyConfigurationRepository ;
$ connection = new Connection (...);
$ repository = new WhitelistStrategyConfigurationRepository ( $ connection );
$ repository -> migrateSchema (); Der gesamte vorherige Code ist bei Verwendung von Symfony optional: Alles wird durch die FeatureTogglesBundle -Klasse zusammengehalten.
Um von der Symfony-Integration zu profitieren, ist die Registrierung des Bundles in config/bundles.php erforderlich:
return [
// ...
Trompette FeatureToggles Bundle FeatureTogglesBundle::class => [ ' all ' => true ],
]; Das Bundle kann wie in config:dump-reference beschrieben konfiguriert werden:
# Default configuration for extension with alias: "feature_toggles"
feature_toggles :
doctrine_dbal_connection : doctrine.dbal.default_connection
declared_features :
# Prototype
name :
description : ~ # Required
strategy : ~ # Required Technische Details finden Sie in FeatureTogglesConfiguration -Klasse.
Es gibt nur einen als öffentlich deklarierten Dienst: den Toggle-Router mit TrompetteFeatureTogglesToggleRouter oder TrompetteFeatureTogglesToggleRouterInterface als Bezeichner.
Es gibt auch nützliche Konsolenbefehle, die als Dienste definiert und mit console.command gekennzeichnet sind:
feature-toggles
feature-toggles:configure-feature Configures a feature
feature-toggles:migrate-dbal-schema Migrates DBAL schema
feature-toggles:show-feature-configuration Shows a feature configuration
Weitere Informationen zu den Befehlen finden Sie in den entsprechenden Hilfemeldungen.
Technische Details finden Sie in der FeatureTogglesExtension -Klasse.
Die trompette/feature-toggles Bibliothek wird unter der MIT-Lizenz veröffentlicht.
Weitere Einzelheiten finden Sie in der LICENSE-Datei.
Die trompette/feature-toggles Bibliothek ist von einer Praxis und einem Tool inspiriert, die vom Food Assembly-Entwicklungsteam verwendet werden.
Das Team entdeckte die Praxis mit dem Artikel Web Experimentation with New Visitors auf Etsys Engineering Blog.