partechgss / laravel-feature-toggle
Laravel 特性开关包装器。
v1.0.5
2020-07-23 15:49 UTC
Requires
- php: ^7.4
- splitsoftware/split-sdk-php: 6.2.4
Requires (Dev)
- orchestra/testbench: ^5.3
- phpunit/phpunit: ^9.2
README
此包允许您在 Laravel 中实现功能开关。目前唯一支持的实施方案是 split.io。
基本用法
根据标志更改行为
use PartechGSS\Laravel\FeatureToggle\Contracts\FeatureToggleClient;
$client = resolve(FeatureToggleClient::class);
switch ($client->getTreatment('my_flag')) {
case "on":
do_a_thing();
break;
default:
do_another_thing();
break;
}
检索与治疗关联的配置
$treatmentWithConfig = $client->getTreatmentWithConfig('my_flag');
$treatment = $treatmentWithConfig['treatment'];
$config = $treatmentWithConfig['config'];
set_some_css_options($config);
批量检索多个标志
$treatments = $client->getTreatments(['my_flag', 'another_flag']);
switch($treatments['my_flag']) {
...
}
批量检索配置
$treatmentsWithConfig = $client->getTreatmentsWithConfig('my_flag');
$treatment = $treatmentsWithConfig['my_flag']['treatment'];
$config = $treatmentsWithConfig['my_flgag']['config'];
set_some_css_options($config);
安装
您可以通过 Composer 安装此包
composer require partechgss/laravel-feature-toggles
配置
配置文件
查找 config/feature-toggle.php。要安装默认配置
php artisan vendor:publish
中间件
您需要将切换 "key" 设置在某个地方。这通常是用户邮箱地址之类的信息,用于决定用户为特定标志获得哪种治疗。此包提供中间件,可以自动根据用户的电子邮件地址设置键。这必须在您的认证中间件之后运行,因此,首先将其作为路由中间件提供,并在您的 app/Http/Kernel.php 中设置优先级。
use PartechGSS\Laravel\FeatureToggle\Middleware\SetFeatureToggleKeyFromUserEmail;
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'feature-toggle' => SetFeatureToggleKeyFromUserEmail::class,
];
protected $middlewarePriority = [
\App\Http\Middleware\Authenticate::class,
SetFeatureToggleKeyFromUserEmail::class,
];
作为路由中间件执行
# routes/api.php
Route::middleware(['auth:api', 'feature-toggle'])->group(function() {
...,
});
通过路由中间件组执行
# app/Http/Kernel.php
protected $middlewareGroups = [
'web' => [
...,
'feature-toggle',
],
'api' => [
\Barryvdh\Cors\HandleCors::class,
'throttle:60,1',
'bindings',
'feature-toggle',
],
];
测试
本项目
composer test
您的项目
SplitIO SDK 在本地模式找不到配置文件时会抛出错误。为了解决这个问题,创建一个模拟的本地 split.yaml 文件,并让工厂加载它。例如,您可以将测试环境中的 SPLITIO_SPLIT_FILE 设置为指向您的文件
# .env.testing
SPLITIO_SPLIT_FILE=tests/__data__/split.yaml
这假设在 tests/__data__/split.yaml 有一个类似这样的文件
- hello_world:
treatment: off
- hello_world:
treatment: on
keys: "user@example.org"