socloz/feature-flag-bundle

此包已被废弃且不再维护。未建议替代包。

管理功能标志和A/B测试的包

v0.4 2015-02-19 13:20 UTC

This package is not auto-updated.

Last update: 2020-01-18 05:27:48 UTC


README

管理功能标志和A/B测试的包

此包尚未准备好用于生产 - 一些功能尚未完全开发和测试

依赖

功能标志

功能定义在应用配置中。功能可以通过提供的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)。