silverstripe / featureflags
一个实验性模块,允许在 SilverStripe 应用中通过管理员控制功能标志
Requires
- silverstripe/framework: ^4.0.0-alpha6
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
上下文。在第二个示例中,可以是 Project
或 SiteTree
。
每个功能定义(如下所述)都包含它期望的上下文列表。基于此,控制功能标志的管理员界面将为选择功能提供不同的工具。
定义新功能
要定义新功能,请将新项目添加到您的配置中的数组 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,列出每个可用功能,并提供一些表单控件来选择哪些上下文值将导致启用功能。
上下文字段提供者
对于上下文中的每个数据类型,您需要一个表单控件来编辑它。这些由“上下文字段提供者”提供。默认情况下,我们为 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
- 键应该是您希望使用字段提供者一起使用的上下文类
- 值应该是字段提供者的类名