featurit / featurit-sdk-laravel
FeaturIT的Laravel SDK
Requires
- php: ^8.0.2
- ext-json: *
- featurit/featurit-sdk-php: ^0.8.0
- illuminate/support: ^5.1 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0
Requires (Dev)
- laravel/framework: ^11.0
- orchestra/testbench: ^9.0
- php-http/guzzle7-adapter: ^1.0
- phpunit/phpunit: ^10.0
Suggests
- laravel/framework: To test the Laravel bindings
README
Laravel的FeaturIT特征标志管理平台PHP客户端的包装。
描述
此包旨在简化FeaturIT API在Laravel项目中的集成。
入门
依赖关系
- PHP >= 8.0.2
- laravel/framework >= 5.1
- psr/http-client-implementation
- psr/simple-cache-implementation
安装
composer require featurit/featurit-sdk-laravel
如果没有提供psr/http-client-implementation的包,请访问https://packagist.org.cn/providers/psr/http-client-implementation并选择最适合您项目的包。
如果没有提供psr/simple-cache-implementation的包,请访问https://packagist.org.cn/providers/psr/simple-cache-implementation并选择最适合您项目的包。
在您的config/app.php文件中,在providers数组中添加
/*
* Package Service Providers...
*/
Featurit\Client\Laravel\FeaturitServiceProvider::class,
如果您想发布默认配置文件以自定义诸如默认FeaturitUserContextProvider之类的设置,请使用以下命令
php artisan vendor:publish --provider="Featurit\Client\Laravel\FeaturitServiceProvider"
基本用法
这是您如何在控制器、服务或PHP代码库的任何地方使用Featurit的方式
if (Featurit::isActive('YOUR_FEATURE_NAME')) {
your_feature_code();
}
或者,为了检查您的功能版本
if (Featurit::version('YOUR_FEATURE_NAME') == 'v1') {
your_feature_code_for_v1();
} else if (Featurit::version('YOUR_FEATURE_NAME') == 'v2') {
your_feature_code_for_v2();
}
Blade指令
为了方便,我们提供了3个blade指令,允许根据特征标志值加载blade组件。
在您的blade模板中,您可以使用它们如下
<div>
<h2>This code will always be visible</h2>
@ifFeatureIsActive('MY_ACTIVE_FEATURE')
<h2>This will be visible</h2>
@endifFeatureIsActive
@ifFeatureIsNotActive('MY_ACTIVE_FEATURE')
<h2>This will NOT be visible</h2>
@endifFeatureIsNotActive
@ifFeatureVersionEquals('FEATURE_WITH_VERSIONS', 'v1')
<h2>Welcome to v1!</h2>
@endifFeatureVersionEquals
@ifFeatureVersionEquals('FEATURE_WITH_VERSIONS', 'v2')
<h2>Welcome to v2!</h2>
@endifFeatureVersionEquals
</div>
定义您的FeaturitUserContext
为了向不同的用户显示不同的功能版本,FeaturIT需要知道用户在特定上下文中的属性。
您可以使用以下方式定义上下文
$contextData = get_your_user_context_data();
Featurit::setUserContext(
new DefaultFeaturitUserContext(
$contextData['userId'],
$contextData['sessionId'],
$contextData['ipAddress'],
[
'role' => $contextData['role'],
...
]
)
);
定义自定义FeaturitUserContextProvider
这是使用Featurit::setUserContext(...);
的替代方案。
默认情况下,FeaturIT的Laravel SDK在您的config/featurit.php文件中包含默认的FeaturitUserContextProvider
'featurit_user_context_provider' => Featurit\Client\Laravel\Providers\LaravelFeaturitUserContextProvider::class,
但您可以创建自己的实现,以便添加自定义属性,以便在分段过程中使用。
假设您的平台用户有一个“role”属性,您使用它来决定向每个用户显示哪些功能。在这种情况下,您可以创建一个实现如下
<?php
namespace My\Namespace\Of\Choice;
use Featurit\Client\Modules\Segmentation\DefaultFeaturitUserContext;
use Featurit\Client\Modules\Segmentation\FeaturitUserContext;
use Featurit\Client\Modules\Segmentation\FeaturitUserContextProvider;
use Illuminate\Support\Facades\Auth;
class MyCustomFeaturitUserContextProvider implements FeaturitUserContextProvider
{
public function getUserContext(): FeaturitUserContext
{
if (! Auth::check()) {
return new DefaultFeaturitUserContext(
null,
null,
null,
[
'role' => 'Guest',
]
);
}
$user = Auth::user();
$userId = $user->getAuthIdentifier();
$sessionId = session()->getId();
$ipAddress = request()->ip();
$role = $user->role;
return new DefaultFeaturitUserContext(
$userId,
$sessionId,
$ipAddress,
[
'role' => $role,
]
);
}
}
然后您必须将您的实现替换在config/featurit.php文件中
'featurit_user_context_provider' => My\Namespace\Of\Choice\MyCustomFeaturitUserContextProvider::class,
这样就可以了,从现在起,您的分段规则将使用角色属性。
作者
FeaturIT