socloz / feature-flag-bundle
管理功能标志和A/B测试的包
Requires
- php: >=5.3.2
- ext-redis: *
- symfony/framework-bundle: ~2.0
Requires (Dev)
- phpunit/phpunit: @stable
This package is not auto-updated.
Last update: 2020-01-18 05:27:48 UTC
README
管理功能标志和A/B测试的包
此包尚未准备好用于生产 - 一些功能尚未完全开发和测试
依赖
- 使用phpredis的Redis
功能标志
功能定义在应用配置中。功能可以通过提供的admin控制器(全局级别)、应用(会话级别)、提供的front-end控制器(会话级别)启用/禁用,或者通过向页面URL添加请求参数(页面级别)。
- 使用提供的admin控制器(全局级别),
- 通过您的应用(会话级别),
- 使用提供的front-end控制器(会话级别),
- 通过向页面URL添加请求参数。
功能可以有以下默认状态
- disabled-always : 功能始终禁用,无法启用,
- disabled-hidden : 功能被禁用,不能全局启用。可以通过前端会话控制器或请求参数在开发/测试目的下启用,
- disabled : 功能被禁用,可以启用,
- enabled : 功能被启用,可以禁用,
- enabled-always : 功能始终启用,无法禁用。
A/B测试
功能可以有多个变体。变体的列表定义在配置文件中,您负责根据这些变体修改您的模板。
变体由包自动选择,但可以更改
- 通过您的应用(会话级别),
- 使用提供的front-end控制器(会话级别),
- 通过向页面URL添加请求参数。
该服务提供简单的成功/失败计数机制。您也可以使用您喜欢的任何外部分析服务。
配置
基本配置为
socloz_feature_flag: options: redis: host: "host:port,host:port" features: feature_name: state: [enabled|enabled-always|disabled|disabled-hidden|disabled-always] description: used for the admin page variations: list of variation names
其他选项
socloz_feature_flag.options.redis.prefix
: redis键的前缀(默认:socloz_feature_flag
)
使用功能标志
测试当前用户是否启用了功能
PHP
if ($this->get('socloz_feature_flag.feature')->isEnabled('feature_name')) { [...] }
Twig
{% if feature_is_enabled('feature_name') %}...{% endif %}
为当前用户启用/禁用功能
PHP
$this->get('socloz_feature_flag.feature')->enableForUser('feature_name'); $this->get('socloz_feature_flag.feature')->disableForUser('feature_name');
使用A/B测试
获取当前用户的特征变体
PHP
if ($this->get('socloz_feature_flag.abtesting')->getFeatureVariation('feature_name') == 'A') { [...] }
Twig
{% if ab_variation('feature_name') == 'A' %}...{% endif %}
计数交易
PHP
$this->get('socloz_feature_flag.abtesting')->begin('feature_name'); $this->get('socloz_feature_flag.abtesting')->success('feature_name'); $this->get('socloz_feature_flag.abtesting')->failure('feature_name');
分析调用
Twig
{{ ab_tracking('feature_name') }}
管理界面
管理界面位于/feature-flag/admin/features
。
要使用管理界面,您必须在routing.yml
中加载admin路由
socloz_feature_flag_feature_admin: resource: "@SoclozFeatureFlagBundle/Resources/config/routing/admin.xml" prefix: /feature-flag/admin
twig模板使用Twitter Bootstrap CSS类,但不包含Twitter Bootstrap。
您可以通过创建一个app/Resources/SoclozFeatureBundle/views/layout-admin.html.twig
文件来覆盖布局,例如
{% extends "AcmeAdminBundle::layout.html.twig" %} {% block my_block %} {% block socloz_feature_flag %} {% endblock socloz_feature_flag %} {% endblock %}
您必须在您的security.yml
文件中保护管理路由
access_control: - { path: ^/feature-flag/admin/, role: IS_AUTHENTICATED_FULLY }
使用适当的角色...
前端控制器
如果您想能够切换当前会话的功能或变体,请加载相应的路由
socloz_feature_flag_feature: resource: "@SoclozFeatureFlagBundle/Resources/config/routing/feature.xml" prefix: /feature-flag socloz_feature_flag_ab: resource: "@SoclozFeatureFlagBundle/Resources/config/routing/ab_testing.xml" prefix: /feature-flag
您可以使用/feature-flag/{feature name}/enable
和/feature-flag/{feature name}/disable
来切换当前会话的服务。
您可以使用/feature-flag/{feature name}/change_variation/{variation}
来更改当前会话的变体。
控制器将重定向到配置为socloz_feature_flag.options.base.redirect
的路由(使用路由名称)。
您可以使用/feature-flag/{feature name}/status
或/feature-flag/{feature name}/ab_status
来显示功能状态或变体。
页面级别切换
您可以通过查询字符串参数来更改变体或切换功能
socloz_feature_flag_{feature name}_enabled
(0禁用,1启用)socloz_feature_flag_{feature name}_variation
(添加变体名称)
Google Analytics
Google Analytics实现期望您使用异步Google Analytics标签。如果您的标签看起来像这样
var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-XXXXX-X']); _gaq.push(['_trackPageview']); [...]
则一切正常。如果不符合这个样子,分析将无法工作。
使用单个自定义变量(会话级别)来处理所有功能。因此,您必须为所有功能使用相同的变体集,并使用socloz_feature_flag.splitter.shared_random
分割器(见下文)。
可以通过以下方式配置自定义变量
socloz_feature_flag.google_analytics.variable_id
(变量的id,默认1)socloz_feature_flag.google_analytics.variable_name
(变量的名称,默认socloz_feature_flag_variation)
高级配置
所有内部服务都可以被覆盖
分割器服务
配置:socloz_feature_flag.services.splitter
分割器服务为当前用户选择一个变体。可用的分割器有:
socloz_feature_flag.splitter.random
(默认): 选择一个随机变体socloz_feature_flag.splitter.shared_random
:尝试为具有相同变体集的功能使用相同的变体(对Google Analytics很有用)
可以编写自定义分割器。它必须实现Socloz\FeatureFlagBundle\ABTesting\Splitter\SplitterInterface
。
事务服务
配置:socloz_feature_flag.services.transaction
事务服务计算成功的交易。
只有一个实现的事务:socloz_feature_flag.transaction.session
。
可以编写自定义事务服务。它必须实现Socloz\FeatureFlagBundle\ABTesting\Transaction\TransactionInterface
。
状态服务
配置:socloz_feature_flag.services.state
当前用户的特征状态从状态服务列表中存储/恢复。状态写入所有服务,并从第一个服务读取。
默认是:[socloz_feature_flag.state.request, socloz_feature_flag.state.session]
。
socloz_feature_flag.state.request
读取查询字符串且不写入任何地方socloz_feature_flag.state.session
读取/写入会话
可以编写自定义状态服务。它必须实现Socloz\FeatureFlagBundle\State\StateInterface
。
存储服务
配置:socloz_feature_flag.services.storage
存储服务存储全局数据(功能状态、计数等)
默认是:socloz_feature_flag.storage.redis
。
可以编写自定义存储服务。它必须实现Socloz\FeatureFlagBundle\Storage\StorageInterface
。
分析服务
配置:socloz_feature_flag.services.analytics
存储服务生成用于调用外部分析服务的HTML代码。
默认值为:socloz_feature_flag.analytics.google_analytics
。
可以编写自定义的分析服务。它必须实现Socloz\FeatureFlagBundle\Analytics\AnalyticsInterface
。
许可证
本软件包遵循MIT许可证发布(见LICENSE)。