剂量 / laravelfeature
受Etsy\Feature启发的Laravel加速和A/B测试库。
Requires
- php: >=5.4.0
- dose/feature: 1.*
- illuminate/config: 4.* || 5.*
- illuminate/http: 4.* || 5.*
- illuminate/session: 4.* || 5.*
- illuminate/support: 4.* || 5.*
Requires (Dev)
- fabpot/php-cs-fixer: 1.*
- phpunit/phpunit: 4.*
This package is not auto-updated.
Last update: 2024-09-14 18:52:57 UTC
README
受Etsy\Feature启发的Laravel加速和A/B测试库。
如何使用
在将此包添加到composer文件后,您需要注册其服务提供者。
'Dose\LaravelFeature\LaravelFeatureServiceProvider'
您还想要发布配置,以便您可以定义功能。
php artisan config:publish dose/laravelfeature // Laravel 4
php artisan vendor:publish --provider="Dose\LaravelFeature\LaravelFeatureServiceProvider" // Laravel 5
要获取对API的访问权限,您需要从服务容器中解析一个实例。
$feature = app()->make('Dose\LaravelFeature\LaravelFeatureInterface');
当然,也可以使用依赖注入。
获取变体
$feature->getVariant($name);
这将返回选定的变体。如果没有变体被选中或功能不存在,它也可能返回NULL(具有不完整覆盖的功能)。
设置上下文
$feature->setContext($context);
这不是常用的功能,但允许您更改变体选择的上下文。默认情况下,使用用户的会话ID。这意味着变体将在会话期间保持不变。
有时您可能希望根据不同的标准轮换变体。例如,如果您想使某个作者的帖子对所有用户都有一组一致的功能,可以通过设置上下文来实现。
$feature->setContext('post_author:' . $postAuthor);
A/B测试
同时运行多个带有多个变体的A/B测试是一个常见的用例。为了获取有价值的测试结果,一次只能有一个测试处于活动状态。为了实现这一点,您需要定义一个包装功能。变体将代表每个测试。
'tests' => [
'test_a',
'test_b',
'test_c',
],
'test_a' => [
'variant_a',
'variant_b',
],
'test_b' => [
'variant_a',
'variant_b',
],
'test_c' => [
'variant_a',
'variant_b',
],
这允许我们检查特定的测试是否处于活动状态,然后检索其变体。
if ($feature->getVariant('tests') == 'test_a') {
$variant = $feature->getVariant('test_a');
}
配置
您可以使用两个配置文件来控制行为。
config.php
在此文件中,您可以指定用户是否可以通过特定的URL参数覆盖变体选择。
'allow_override' => false,
默认情况下,此功能已禁用。您可以通过定义自己的逻辑来控制谁可以使用URL覆盖。
'allow_override' => Gate::allows('feature_url_override'),
features.php
在这里定义了所有您的功能。
在定义功能方面有许多灵活性。我们将从最详细的方法开始,然后逐步进行。
每个功能可以有任意数量的变体,每个变体都定义了自己的概率。
'feature' => [
'variant_a' => 25,
'variant_b' => 25,
'variant_c' => 50,
],
在上面的示例中,每个变体都有指定的被选中的概率。概率低于0的变体将被归一化到0。变体将自上而下处理。如果概率总和超过100,则功能将饱和,超过该阈值的任何变体都没有被选中的机会。
'feature' => [
'variant_a' => 100,
'variant_b' => 25,
'variant_c' => 50,
],
上面的功能将始终返回variant_a。
您可以省略概率,只指定变体。在这种情况下,变体将均匀分布。
'feature' => [
'variant_a',
'variant_b',
],
在这种情况下,两个变体都有50%被选中的机会。
这些方法可以混合使用。重要的是要注意,具有指定概率的变体将首先处理,然后剩余的概率将分配给自动缩放的变体。
'feature' => [
'variant_a' => 50,
'variant_b',
'variant_c',
],
第一个变体有50%的机会出现,而其他两个各有25%的机会。
要指定简单的开/关功能,只需包含一个变体。
'feature' => [
'enabled' => 100,
],
此功能始终开启。我们可以调整概率以完全关闭它或实现加速功能。
也可以通过只定义功能的概率来简化上面的示例。
'feature' => 50,
此功能将有50%的用户开启。
URL覆盖
如果启用了URL覆盖,您可以通过在URL中指定它来强制使用特定的变体
?features=example_feature:variant_1