featurit/featurit-sdk-laravel

FeaturIT的Laravel SDK

v0.9.0 2024-09-26 11:56 UTC

This package is auto-updated.

Last update: 2024-09-26 11:57:14 UTC


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

https://www.featurit.com

featurit.tech@gmail.com