onix-systems-php/hyperf-feature-flags

本包最新版本(v1.0.1)无可用许可证信息。

特性标志扩展

v1.0.1 2024-02-19 08:58 UTC

This package is auto-updated.

Last update: 2024-09-19 10:20:11 UTC


README

包含以下通用使用类

  • 注解
    • FeatureFlag;
  • 方面
    • FeatureFlagAspect;
  • 常量
    • Actions;
  • DTO
    • ResetFeatureFlagDTO;
    • UpdateFeatureFlagDTO;
  • 事件
    • Action;
  • 模型
    • FeatureFlag;
  • 仓库
    • FeatureFlagRepository;
  • 服务
    • GetCurrentFeatureFlagService;
    • GetFeatureFlagService;
    • GetOverriddenFeatureFlagService;
    • ResetFeatureFlagService;
    • SetFeatureFlagService
  • 其他
    • RedisWrapper

安装

composer require onix-systems-php/hyperf-feature-flags

发布配置

php bin/hyperf.php vendor:publish onix-systems-php/hyperf-feature-flags

在配置中定义特性标志

格式:'name' => 'rule'

config/autoload/feature-flags.php

return [
    'slack-integration' => true,
    'my-custom-feature' => "[date:now] > '2024-02-06' && [date:now] <= '2024-12-31'",
    'my-awesome-feature' => '[config:slack.integration] === true || [feature:my-custom-feature] === false',
];

注意! 如果您想使用日期,在您的规则中必须使用单引号括起来的日期。否则,规则将始终评估为 true。

基本用法

示例

  1. 通过: OnixSystemsPHP\HyperfFeatureFlags\Annotations\FeatureFlag
#[FeatureFlag('slack-integration', false)]
private function sendSlackNotification(string $link, Feedback $feedback): bool
{
    //...
}

从这段代码中我们可以看到,如果我们的 feature_flags 表或 redis 中的 slack-integrations 为 true,则将执行 sendSlackNotification 方法。在 FeatureFlag 方面的第二个参数设置为 false,则表示如果任何地方不存在 slack-integartion,则默认方面将返回 false,此方法也将返回 false。

  1. 通过: OnixSystemsPHP\HyperfFeatureFlags\Services\GetFeatureFlagService

此示例介绍了如何从您的控制器方法中使用它,该方法应返回 Psr\Http\Message\ResponseInterface。这里我们不使用注解,因为我们需要返回的不是原始数据,而是一个对象。所以如果 $this->getFeatureFlagService->run('slack-integration') 返回 false,我们只需返回 $this->response->json([])。否则,继续执行。

class SlackController
{
    public function __construct(private \OnixSystemsPHP\HyperfFeatureFlags\Services\GetFeatureFlagService $getFeatureFlagService) {}
    public function webhook(): Psr\Http\Message\ResponseInterface
    {
        if (!$this->getFeatureFlagService->run('slack-integration')) {
            return $this->response->json([])
        }
    }
}

例如,我们在配置中有以下规则

return [
    'my-awesome-feature' => true,
    'my-custom-feature' => "[date:now] > '2050-31-12' || [config:slack.integration] || [feature:my-awesome-feature]",
]

此规则的值是什么?

  1. 第一部分,将评估 [date:now] > '2050-31-12'。显然,直到 2050-31-12 它将是 false。
  2. 第二部分,将评估 [config:slack.integration]。如果您的 config/autoload/slack.php 文件中存在,它将获取 integration 的值。假设我们的配置文件中没有 slack-integration,那么它将是 null
  3. 第三部分,将评估 [feature:my-awesome-feature]。没有什么特别之处,它将从我们的文件 /config/autoload/feature_flags.php 中获取 true 值。
  4. 最终,my-custom-feature 规则的评估将是 false || null || true。评估结果将是 true

OnixSystemsPHP\HyperfFeatureFlags\Services\SetFeatureFlagService

此类允许您将特性标志设置到 feature_flags 表中。方法 run() 接受一个参数:具有名称和规则特性的 UpdateFeatureFlagDTO。它检查是否可以设置指定的特性标志。因此,您应该实现策略逻辑。

OnixSystemsPHP\HyperfFeatureFlags\Services\ResetFeatureFlagService

此类允许您重置您的功能。简单来说,它只是从数据库和Redis中删除您的标志。方法 run() 接受一个参数:具有名称和规则的功能标志的 ResetFeatureFlagDTO它会检查指定的用户是否有权重置此功能标志。因此,您应该实现策略逻辑。

OnixSystemsPHP\HyperfFeatureFlags\Services\GetCurrentFeatureFlagService

此类允许您获取所有当前功能标志。方法 run() 返回一个关联数组,包含功能标志的名称和基于规则的值。

OnixSystemsPHP\HyperfFeatureFlags\Services\GetOverriddenFeatureFlagsService

此类允许您获取所有被覆盖的功能。简单来说,它只是从数据库和Redis中获取您的标志。方法 run() 返回一个关联数组,包含功能标志的名称和值。

OnixSystemsPHP\HyperfFeatureFlags\Services\GetFeatureFlagService

此类允许您获取规则值。首先,它会去Redis检查是否存在,如果存在,则取出。其次,如果不存在,它会去数据库检查是否有同名标志,如果存在,则取出。最后,它会去配置文件,即使配置文件中存在该规则,它也会简单地返回 false,在这些情况下,它会将值存储到Redis中。

许可证

MIT许可证(MIT)。请参阅许可证文件获取更多信息。