roboticsexpert/feature-flag

轻松将功能标志功能添加到您的laravel应用程序

v1.0.3 2022-01-23 10:26 UTC

This package is not auto-updated.

Last update: 2024-09-22 03:12:22 UTC


README

尽可能简单地将功能标志功能引入您的项目

如果您想了解什么是功能标志,请查看Martin Fowler关于此主题的文章:https://martinfowler.com.cn/articles/feature-toggles.html

安装

composer require roboticsexpert/feature-flag

安装composer包后,如果您使用自动发现服务提供者,则一切正常,但如果您阻止了这一点,只需将此行添加到config/app.php中的providers部分即可

Roboticsexpert\FeatureFlag\FeatureFlagServiceProvider::class

之后,您应该运行

php artisan migrate

用法

您可以使用此项目,使用两种策略:外观或依赖注入!

我建议您使用依赖注入以利用IDE自动完成功能,但请按您的喜好使用它!

外观

您可以通过以下方式获取功能标志服务:

use Roboticsexpert\FeatureFlag\FeatureFlagFacade as FeatureFlag;


FeatureFlag::getTypes()

依赖注入

您可以通过以下方式获取功能标志服务:

use Roboticsexpert\FeatureFlag\Services\FeatureFlagService;

$featureFlag=app(\Roboticsexpert\FeatureFlag\Services\FeatureFlagService::class); //or you can get this service from input of controller method

$featureFlag->getTypes();

方法

创建功能标志

$featureFlagModel=$featureFlagService->createFeatureFlag('FEATURE_NAME');
dd($featureFlagModel->name);

更改功能标志的类型(管理员)

//OPTIONS: DISABLED , PRIVATE , PUBLIC
$featureFlagModel=$featureFlagService->changeFeatureFlagType('FEATURE_NAME','DISABLED');
//or    
$featureFlagModel=$featureFlagService->changeFeatureFlagType('FEATURE_NAME',\Roboticsexpert\FeatureFlag\Models\FeatureFlag::TYPE_DISABLED);

删除功能标志(管理员)

$featureFlagService->destroyFeatureFlag('FEATURE_1');

获取所有功能标志(管理员)

$featureFlags=$featureFlagService->getAllFeatureFlags();

将用户添加到或从功能标志中分离

$featureFlagService->attachUserToFeatureFlag(1,'FEATURE_1');

$featureFlagService->detachUserToFeatureFlag(1,'FEATURE_1');

获取用户或公开用户的未激活功能列表

首先,应该解释为什么应该使用禁用功能而不是启用功能!

  • 当一个功能对所有用户公开时,我们应该通知所有客户端该功能是启用的,直到客户端更新,但旧客户端需要永远拥有该功能!!!
  • 如果您返回启用功能,您的功能列表会变得越来越大!

最终,我更喜欢实现禁用功能,并且您应该向客户端返回此列表!

//It will return array of names of features (string)
//No input for not logged in users
$featureFlagService->getDisabledFeatureFlagsName();

//User identifier for logged in users
$featureFlags=$featureFlagService->getDisabledFeatureFlagsName(1);