featurit/featurit-sdk-symfony

FeaturIT SDK for Symfony

安装: 574

依赖: 0

建议者: 0

安全: 0

星标: 2

关注者: 3

分支: 0

开放问题: 0

类型:symfony-bundle

v0.6.0 2024-09-26 12:12 UTC

This package is auto-updated.

Last update: 2024-09-26 12:13:01 UTC


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

https://www.featurit.com

featurit.tech@gmail.com