ziming/laravel-statsig

Laravel Statsig 包

1.3 2024-03-20 03:33 UTC

This package is auto-updated.

Last update: 2024-09-11 07:15:44 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

Laravel Statsig 包。功能门控与 A/B 测试平台

更新:截至 2023 年 8/9 月,Statsig 决定从其免费层中删除许多功能。这也意味着,如果您遇到付费层功能的问题,我将无法再帮助您,因为我不是付费层用户。

支持我们

也欢迎捐赠作为替代方式。任何东西都可以。

您还可以让 Stasig 知道,这个包是您推荐的

安装

您可以通过 composer 安装此包

composer require ziming/laravel-statsig

将以下 2 个命令添加到您的 Laravel 项目 app/Console/Kernel.php

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Ziming\LaravelStatsig\Commands\StatsigSendCommand;
use Ziming\LaravelStatsig\Commands\StatsigSyncCommand;

class Kernel extends ConsoleKernel
{
    /**
     * Define the application's command schedule.
     */
    protected function schedule(Schedule $schedule): void
    {
        // https://docs.statsig.com/server/phpSDK#sync
        $schedule->command(StatsigSyncCommand::class)->everyMinute();
        
        // https://docs.statsig.com/server/phpSDK#send
        $schedule->command(StatsigSendCommand::class)->everyMinute();
    }

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="statsig-config"

这是已发布配置文件的内容

use Statsig\Adapters\LocalFileDataAdapter;
use Statsig\Adapters\LocalFileLoggingAdapter;

return [
    'secret' => env('STATSIG_SECRET_KEY'),

    'data_adapter' => LocalFileDataAdapter::class,
    
    // arguments to the Data Adapter class constructor
    'data_adapter_arguments' => [
        // '/tmp/statsig/', // empty array for the default directory for the default Data Adapter
    ],

    'logging_adapter' => LocalFileLoggingAdapter::class,
    
    // arguments to the Logging Adapter class constructor
    'logging_adapter_arguments' => [
        // '/tmp/statsig.logs', // empty array for the default file path for the default Logging Adapter
    ],
];

用法

use Illuminate\Support\Facades\App;
use Illuminate\Foundation\Auth\User;
use Illuminate\Support\Facades\Auth;
use Statsig\StatsigUser;
use Ziming\LaravelStatsig\Facades\LaravelStatsig;
use Ziming\LaravelStatsig\LaravelStatsigEvent;
use Ziming\LaravelStatsig\LaravelStatsigUserConfiguration;

$laravelStatsig = new Ziming\LaravelStatsig();
$user = Auth::user();
$laravelStatsig->checkGate($user, 'gate_name');

// The Facade Version is fine too
LaravelStatsig::checkGate($user, 'gate_name');

// You can set add this to 1 of your ServiceProviders boot() method to
// override the default laravel user to Statsig user conversion code too if you want
LaravelStatsigUserConfiguration::setConversionCallable(function (User $laravelUser): StatsigUser {
        $statsigUser = StatsigUser::withUserID((string) $laravelUser->getAuthIdentifier());
        $statsigUser->setEmail($laravelUser->getEmailForVerification());
        $statsigUser->setIP(request()->ip());
        $statsigUser->setLocale(App::currentLocale());
        $statsigUser->setUserAgent(request()->userAgent());
        
        // $statsigUser->setCountry('US');
        
        return $statsigUser;
});

// Lastly you can also use LaravelStatsigEvent instead of StatsigEvent
// as it accepts a laravel user object
// See Useful References at the end of the read me for some best practices to follow for events naming conventions

$statsigEvent = new LaravelStatsigEvent('event_name');

// Giving it a value is optional
$statsigEvent->setValue('string-or-float-or-int-or-whatever-primitive-type');

// Extra event metadata is optional too. See the official Statsig docs on how many you can send
$statsigEvent->setMetadata([
    'key' => 'value' 
]);

// You can also use this convenience method
LaravelStatsig::logEventWithAuthUser($statsigEvent);

// or this
$statsigEvent->setUser(Auth::user());
$laravelStatsig->logEvent($statsigEvent);

提供了一个便捷的 blade 指令,用于在前端 blade 模板中检查 Statsig 功能门控

它的命名方式全小写,以符合官方 Laravel 对 blade 指令的命名约定。

@statsigcheckgate('gate_name')
    <p>This is shown if this statsig gate return true for the authenticated user</p>
@endstatsigcheckgate

@statsigcheckgate('gate_name', 'user-identifier')
    <p>This is usually used for guest user but can be ur authenticated user identifier too</p>
@endstatsigcheckgate

@statsigcheckgate('gate_name', $user)
    <p>$user can be a StatsigUser or a laravel user instance</p>
@endstatsigcheckgate

最后,还提供了一个辅助函数,如果您想在 blade 模板中更加简洁,它以蛇形命名,遵循 Laravel 对全局辅助函数的命名约定。

与 blade 指令一样,目前它只能在用户登录时使用。

<div class="{{ statsig_check_gate('gate_name') ? 'border-red' : '' }}">
The Authenticated user will be used to check if it passes this gate
</div>

<div class="{{ statsig_check_gate('gate_name', 'user-identifier') ? 'border-red' : '' }}">
This is usually used for guest user but can be ur authenticated user identifier too
</div>

<div class="{{ statsig_check_gate('gate_name', $user) ? 'border-red' : '' }}">
Use this is you want to pass in a statsig user or laravel user instance
</div>

测试

目前没有测试,请随意提交 PR

composer test

有用的参考资料

以下是一些我认为对您入门有益的阅读材料

实验

事件命名最佳实践

变更日志

请参阅 CHANGELOG 了解最近的变化信息。

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全漏洞

请参阅 我们的安全策略 了解如何报告安全漏洞。

致谢

许可证

MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。