该 PHP 库实现了功能切换基础设施。
使用trompette/feature-toggles
库可以帮助团队迭代且安全地向用户交付新功能,换句话说:它支持持续部署。
有关该主题的更多信息,请参阅 MartinFowler.com 上的功能切换(又名功能标志) 。
trompette/feature-toggles
库分布在 Packagist 上。
可以使用以下命令将其添加为项目依赖项:
composer require trompette/feature-toggles
当开发页面的新版本时,逐步部署新版本可以给团队带来很大的信心。
但它也带来了更多的工作,因为团队需要:
使用trompette/feature-toggles
库,通过询问切换路由器当前用户是否具有某个功能来启用新版本:
if ( $ toggleRouter -> hasFeature ( $ currentUser , ' new_page_version ' )) {
$ templating -> render ( ' new_page.tpl ' , $ newParameters );
} else {
$ templating -> render ( ' page.tpl ' , $ parameters );
}
在使用切换路由器之前,必须注册new_page_version
功能:
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 '
));
在定义特征时,必须引用切换策略来指定决定目标是否具有特征的算法。
实施的策略是:
OnOff
类,Whitelist
类,Percentage
类别。策略可以与布尔运算符组合,例如: onoff and whitelist
、 onoff or whitelist or percentage
等。
现在功能注册表已配置,可以创建切换路由器:
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 ]
);
策略以名称索引的数组形式注入:这些是注册功能时应使用的引用。
切换路由器可用于为给定策略配置功能:
$ 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 );
通过调用策略实例上的关联方法来保留配置更改。
所有 Doctrine DBAL 配置存储库都可以迁移模式,因为它们都实现了SchemaMigrator
接口:
use Doctrine DBAL Connection ;
use Trompette FeatureToggles DBAL WhitelistStrategyConfigurationRepository ;
$ connection = new Connection (...);
$ repository = new WhitelistStrategyConfigurationRepository ( $ connection );
$ repository -> migrateSchema ();
使用 Symfony 时,所有先前的代码都是可选的:所有内容都由FeatureTogglesBundle
类粘合在一起。
需要在config/bundles.php
中注册捆绑包才能从 Symfony 集成中受益:
return [
// ...
Trompette FeatureToggles Bundle FeatureTogglesBundle::class => [ ' all ' => true ],
];
可以按照config:dump-reference
的描述配置该包:
# 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
有关技术详细信息,请参阅FeatureTogglesConfiguration
类。
只有一项服务声明为公共:以TrompetteFeatureTogglesToggleRouter
或TrompetteFeatureTogglesToggleRouterInterface
作为标识符的切换路由器。
还有一些有用的控制台命令定义为服务并用console.command
标记:
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
有关命令的更多信息可以在其帮助消息中找到。
有关技术详细信息,请参阅FeatureTogglesExtension
类。
trompette/feature-toggles
库是根据 MIT 许可证发布的。
有关更多详细信息,请参阅许可证文件。
trompette/feature-toggles
库的灵感来自于 Food Assembly 开发团队使用的实践和工具。
该团队通过 Etsy 工程博客上的文章《与新访客进行 Web 实验》发现了这种做法。