featurit / featurit-sdk-symfony
FeaturIT SDK for Symfony
Requires
- php: ^8.0.2
- featurit/featurit-sdk-php: ^0.8.0
- nyholm/psr7: ^1.5
- symfony/framework-bundle: ^5.2 || ^6.0
Requires (Dev)
- matthiasnoback/symfony-dependency-injection-test: ^4.3
- symfony/http-client: ^5.2-dev
- symfony/phpunit-bridge: ^5.2-dev
- symfony/security-core: ^5.2-dev
- twig/twig: ^3.3
README
Symfony 对 FeaturIT 功能标志管理平台的 PHP 客户端的包装。
描述
本软件包旨在简化 FeaturIT API 在 Symfony 项目的集成。
入门
依赖
- PHP >= 8.0.2
- symfony/framework-bundle >= 5.2
- psr/http-client-implementation
- psr/simple-cache-implementation
安装
composer require featurit/featurit-sdk-symfony -W
如果没有提供 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/bundles.php 文件中,添加
Featurit\Client\Symfony\FeaturitBundle::class => ['all' => true],
如果您想创建自己的配置文件来自定义默认的 FeaturitUserContextProvider 等内容,请创建一个位于 config/packages/featurit.yaml
的文件,内容如下
featurit:
tenant_identifier: '%env(FEATURIT_TENANT_IDENTIFIER)%'
environment_key: '%env(FEATURIT_ENVIRONMENT_KEY)%'
enable_analytics: '%env(FEATURIT_ENABLE_ANALYTICS)%'
cache_ttl_minutes: '%env(FEATURIT_CACHE_TTL_MINUTES)%'
send_analytics_interval_minutes: '%env(FEATURIT_SEND_ANALYTICS_INTERVAL_MINUTES)%'
featurit_user_context_provider: '@my_service_implementing_featurit_user_context_provider'
基本用法
这是您在控制器、服务或 PHP 代码库的任何地方使用 Featurit 的方法
your_method(Featurit $featurit)
{
if ($featurit->isActive('YOUR_FEATURE_NAME')) {
your_feature_code();
}
}
或者,为了检查功能版本的版本
your_method(Featurit $featurit)
{
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();
}
}
Twig 扩展
为了方便,我们提供了两个 twig 函数,允许根据功能标志值渲染 html。
在您的 twig 模板中,您可以使用它们如下所示
<div>
<h2>This code will always be visible</h2>
{% if feature_is_active('MY_ACTIVE_FEATURE') %}
<h2>Welcome to MY_ACTIVE_FEATURE!</h2>
{% endif %}
{% if feature_version_equals('FEATURE_WITH_VERSIONS', 'v1') %}
<h2>Welcome to v1!</h2>
{% elseif feature_version_equals('FEATURE_WITH_VERSIONS', 'v2') %}
<h2>Welcome to v2!</h2>
{% endif %}
</div>
定义您的 FeaturitUserContext
为了向不同的用户展示不同的功能版本,Featurit 需要知道用户在特定上下文中的属性。
您可以使用以下方式定义上下文
your_method(Featurit $featurit)
{
$contextData = get_your_user_context_data();
$featurit->setUserContext(
new DefaultFeaturitUserContext(
$contextData['userId'],
$contextData['sessionId'],
$contextData['ipAddress'],
[
'role' => $contextData['role'],
...
]
)
);
}
定义自定义的 FeaturitUserContextProvider
这是使用 $featurit->setUserContext(...);
的另一种选择。
默认情况下,Featurit SDK for Symfony 包含一个针对 Symfony 优化的默认 FeaturitUserContextProvider,但如果您想创建自己的,请在 services.yaml
文件中创建一个服务,如下所示
services:
...
Namespace\For\MyFeaturitUserContextProvider
arguments:
- arg1
- arg2
- ...
然后将其添加到 featurit.yaml
配置文件中,如下所示
featurit:
...
featurit_user_context_provider: '@Namespace\For\MyFeaturitUserContextProvider'
假设您的平台用户有一个 "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;
class MyCustomFeaturitUserContextProvider implements FeaturitUserContextProvider
{
public function getUserContext(): FeaturitUserContext
{
$userId = my_logic_to_get_the_user_identifier();
$sessionId = my_logic_to_get_the_session_id();
$ipAddress = my_logic_to_get_the_ip_address();
$role = my_logic_to_get_the_user_role();
return new DefaultFeaturitUserContext(
$userId,
$sessionId,
$ipAddress,
[
'role' => $role,
]
);
}
}
然后您必须按照之前解释的方式在 featurit.yaml
文件中替换您的实现。
这样就可以了,从现在开始,您的细分规则将使用角色属性。
作者
FeaturIT