opensoft / rollout
PHP 的功能开关或标志
Requires
- php: >=5.3.3
Requires (Dev)
- doctrine/cache: *
- phpunit/phpunit: >=4.0,<6.0
Suggests
- doctrine/cache: For use with the DoctrineCacheStorageAdapter
- predis/predis: For use with the RedisStorageAdapter
README
PHP 的功能翻转器。Ruby 的 rollout 的移植。
安装它
composer require opensoft/rollout
它的工作原理
初始化 rollout 对象
use Opensoft\Rollout\Rollout; use Opensoft\Rollout\Storage\ArrayStorage; $rollout = new Rollout(new ArrayStorage());
检查特定用户的功能是否激活
$rollout->isActive('chat', $user); // returns true/false
检查全局是否激活了功能
$rollout->isActive('chat'); // returns true/false
存储
有几种不同的存储实现,用于存储 rollout 的配置。
- ArrayStorage - 默认存储,非持久化
- DoctrineCacheStorageAdapter - 需要 doctrine/cache
- PDOStorageAdapter - 使用 PDO 持久化
- RedisStorageAdapter - 使用 Redis 持久化
- MongoDBStorageAdapter - 使用 Mongo 持久化
所有存储适配器都必须实现 Opensoft\Rollout\Storage\StorageInterface
。
组
Rollout 默认包含一个组:all
,它确实像名字一样做。
您可以通过这种方式为聊天功能激活 all
组
$rollout->activateGroup('chat', 'all');
您可能还想定义自己的组。我们有一个用于管理员
$rollout->defineGroup('caretakers', function(RolloutUserInterface $user = null) { if (null === $user) { return false; } return $user->isCaretaker(); // boolean });
您可以为每个功能激活多个组。
这样禁用组
$rollout->deactivateGroup('chat');
特定用户
您可能想让某个特定用户进入 beta 测试或类似的东西。如果该用户不属于现有的组,您可以让他们特别进入
$rollout->activateUser('chat', $user);
这样禁用他们
$rollout->deactivateUser('chat', $user);
Rollout 用户必须实现 RolloutUserInterface
。
用户百分比
如果您正在推出新功能,您可能想通过逐渐为您的用户中的一小部分启用它来测试水。
$rollout->activatePercentage('chat', 20);
确定哪些用户获准进入的算法是这样的
crc32($user->getRolloutIdentifier()) % 100 < $percentage
所以,对于 20%,用户 0,1,10,11,20,21 等将被允许进入。随着百分比的增加,这些用户将保留。
这样禁用所有百分比
$rollout->deactivatePercentage('chat');
注意: 为 100% 的用户激活功能也会使其全局激活。这就像调用 $rollout->isActive()
而不带用户对象一样。
功能已损坏
一次禁用所有人
$rollout->deactivate('chat');
如果监控工具检测到异常高的错误率,您可能希望以编程方式禁用功能。
删除功能(自 2.0.0 版本添加)
如果一个功能变得主流或失败的实验,您可能想从 rollout 中删除功能定义。
$rollout->remove('chat');
注意:如果仍有代码引用该功能,它将使用默认设置重新创建。
Symfony2 Bundle
有一个可用于将 rollout 集成到 Symfony2 项目的 Symfony2 Bundle。可以在 http://github.com/opensoft/OpensoftRolloutBundle 找到。
Zend Framework 2 模块
有一个可用于将 rollout 集成到 Zend Framework 2 项目的模块。可以在 https://github.com/adlogix/zf2-opensoft-rollout 找到。
其他语言的实现
版权
版权 © 2017 James Golick,BitLove,Inc. 详情请参阅 LICENSE。