opensoft/rollout

PHP 的功能开关或标志

2.3.0 2018-12-06 19:11 UTC

This package is auto-updated.

Last update: 2024-08-27 07:01:52 UTC


README

Build Status Scrutinizer Code Quality Code Coverage

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。