silverstripe/featureflags

此软件包已被废弃,不再维护。没有建议的替代软件包。

一个实验性模块,允许在 SilverStripe 应用中通过管理员控制功能标志

安装次数: 12,040

依赖项: 0

建议者: 0

安全性: 0

星标: 7

关注者: 2

分支: 3

开放问题: 5

类型:silverstripe-vendormodule

dev-master / 0.2.x-dev 2017-10-05 02:31 UTC

This package is auto-updated.

Last update: 2024-03-14 13:38:40 UTC


README

此实验性模块允许在 SilverStripe 应用中通过管理员控制功能标志。

版本发布

  • silverstripe/featureflags:~0.1.0: 与 SilverStripe 3 兼容。git 中的 0.1 分支。
  • silverstripe/featureflags:~0.2.0: 与 SilverStripe 4 兼容。git 中的 master 分支。

使用方法

如果您的应用代码,使用 SilverStripe\FeatureFlags\FeatureFlag::isEnabled 来确定标志是否设置。

代码功能依赖性

use SilverStripe\FeatureFlags\FeatureFlag;
// ...
if(FeatureFlag::isEnabled('FEATURE_NAME', [ "Member" => Member::currentUser() ])) {
    $controller->SomeSetting = "some value";
}

第一个参数是功能代号。它们的工作方式与权限代号类似。第二个参数是上下文数据映射,如下所述。

此模块不提供任何控制应用如何根据标志启用来改变的功能;这取决于您。

上下文

上下文有助于回答“何时应显示此功能?”的问题。例如,您可能希望为特定成员启用某个功能。在其他情况下,您可能希望为特定项目或页面启用某个功能。

在第一个示例中,需要 Member 上下文。在第二个示例中,可以是 ProjectSiteTree

每个功能定义(如下所述)都包含它期望的上下文列表。基于此,控制功能标志的管理员界面将为选择功能提供不同的工具。

定义新功能

要定义新功能,请将新项目添加到您的配置中的数组 SilverStripe\FeatureFlags\FeatureFlag.feature

SilverStripe\FeatureFlags\FeatureFlag:
  features:
    - code: FEATURE_NAME
      title: My feature 
      context:
        Member: Member

每个功能都有以下选项

  • code: 这是传递给 FeatureFlag::isEnabled 的第一个参数的代号。按照惯例,我们建议使用 UPPER_SNAKE_CASE。
  • title: 这是功能标志管理员中显示的标题
  • context: 这是所需上下文值的映射。键是上下文键,值是必须从中派生的类或接口。不允许标量上下文。在此处指定的任何上下文值,如果没有传递给 FeatureFlag::isEnabled,将导致错误。

功能管理员

您的 CMS UI 将有一个新的部分,/admin/featureflags。这是一个简单的 modeladmin,列出每个可用功能,并提供一些表单控件来选择哪些上下文值将导致启用功能。

screenshot

上下文字段提供者

对于上下文中的每个数据类型,您需要一个表单控件来编辑它。这些由“上下文字段提供者”提供。默认情况下,我们为 SilverStripe\Security\Member 提供了一个简单的上下文字段提供者。它在类 SilverStripe\FeatureFlags\Context\MemberFieldProvider 中定义。

如果您正在制作依赖于您自己的数据对象的功能标志,您可能需要添加自己的字段提供者。为此,需要进行两个步骤

  • 定义一个实现 SilverStripe\FeatureFlags\Context\FieldProvider 的类。
  • 通过向 context_field_providers 配置设置添加条目来将此类附加到 FeatureFlagAdmin。

配置设置如下所示

SilverStripe\FeatureFlags\FeatureFlagAdmin:
  context_field_providers:
    SilverStripe\Security\Member: SilverStripe\FeatureFlags\Context\Member 
  • 键应该是您希望使用字段提供者一起使用的上下文类
  • 值应该是字段提供者的类名