phputil / flags
一个轻量级、可扩展的PHP特性开关框架
v0.6.0
2024-05-15 22:02 UTC
Requires
- php: ^7.4 || ^8.0
Requires (Dev)
- captainhook/captainhook: ^5.18
- friendsofphp/php-cs-fixer: ^3.35
- kahlan/kahlan: ^5.2
- phpstan/phpstan: ^1.10
- phputil/restage: ^0.3.0
README
🚩 一个轻量级、可定制的 特性开关 框架,用于PHP
您可以自定义
安装
PHP 7.4或更高版本。无外部依赖。
composer require phputil/flags
👉 您可能还希望安装一些官方的 扩展。
扩展
官方扩展
phputil/flags-pdo
- 基于 PDO 的 存储。- ⏳ 即将推出 -
phputil/flags-firebase
- 基于 Firebase 的 存储。 phputil/flags-webhooks
- 一个类似于webhook的 监听器,通过通知外部API关于标志的更改。
第三方扩展
- 创建您自己的,并提交问题进行评估。它可能在这里出现。
用法
基本标志检查
require_once 'vendor/autoload.php'; use phputil\flags\FlagManager; // By default, it uses a storage-based strategy with an in-memory storage $flag = new FlagManager(); if ( $flag->isEnabled( 'my-cool-feature' ) ) { echo 'Cool feature available!', PHP_EOL; } else { echo 'Not-so-cool feature here', PHP_EOL; }
自定义特定验证
// ... use phputil\flags\FlagVerificationStrategy; $flag = new FlagManager(); $myLuckBasedStrategy = new class implements FlagVerificationStrategy { function isEnabled( string $flag ): bool { return rand( 1, 100 ) >= 50; // 50% chance } }; if ( $flag->isEnabled( 'my-cool-feature', [ $myLuckBasedStrategy ] ) ) { echo 'Cool feature available!', PHP_EOL; } else { echo 'Not-so-cool feature here', PHP_EOL; }
自定义所有验证
$flag = new FlagManager( null, [ $myLuckBasedStrategy ] ); if ( $flag->isEnabled( 'my-cool-feature' ) ) { ...
设置标志
$flag->enable( 'my-cool-feature' ); $flag->disable( 'my-cool-feature' ); $flag->setEnable( 'my-cool-feature', true /* or false */ );
删除标志
$flag->remove( 'my-cool-feature' );
检索标志数据
$flagData = $flag->getStorage()->get( 'my-cool-feature' ); // null if not found
添加监听器
// ... use phputil\flags\FlagListener; use phputil\flags\FlagData; $myListener = new class implements FlagListener { public function notify( string $event, FlagData $flagData ): void { if ( $event === 'change' ) { echo 'Flag ', $flagData->key, ' is now ', $flagData->enabled ? 'enabled': 'disabled', PHP_EOL; } else if ( $event === 'removal' ) { echo 'Flag ', $flagData->key, ' was removed.', PHP_EOL; } } }; $flag->addListener( $myListener ); // v0.5.0+ // or $flag->getListeners()->add( $myListener ); $flag->enable( 'my-cool-feature' ); // Notify the listener
自定义
存储
通过
- 创建自己的,扩展
FlagStorage
;或者 - 使用外部 存储扩展。
如何配置它
$storage = /* Create your storage here, e.g. new InMemoryStorage() */; $flag = new FlagManager( $storage );
框架中可用的存储
InMemoryStorage
,将标志存储在内存中。
策略
通过以下方式使用标志验证策略
- 创建自己的,扩展
FlagVerificationStrategy
;或者 - 使用外部 策略扩展。
如何全局配置它
$strategies = [ /* pass your strategies here */ ]; $flag = new FlagManager( null, $strategies );
框架中可用的策略
StorageBasedVerificationStrategy
,在存储中检查标志。EnvBasedVerificationStrategy
,基于环境变量检查标志。
👉 当所有考虑的策略都将其视为启用时,标志被视为启用。
监听器
通过以下方式定义监听器
- 创建您自己的,扩展
FlagListener
;或者 - 使用外部 监听器扩展。
如何配置它
$flag->addListener( $myListener ); // v0.5.0+ // or $flag->getListeners()->add( $myListener );
路线图
- 可扩展库
- 官方扩展
- PDO 基础存储
- 基于 Firebase 的存储
- 类似 Webhook 的监听器
- REST API(外部仓库)
- 基于 Web 的控制面板(外部仓库)