ziming / laravel-statsig
Laravel Statsig 包
1.3
2024-03-20 03:33 UTC
Requires
- php: ^8.1
- illuminate/contracts: ^10.0 | ^11.0
- spatie/laravel-package-tools: ^1.14.0
- statsig/statsigsdk: ^3.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.9 | ^8.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.0 | ^9.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- spatie/laravel-ray: ^1.26
README
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
有用的参考资料
以下是一些我认为对您入门有益的阅读材料
实验
事件命名最佳实践
- https://segment.com/academy/collecting-data/naming-conventions-for-clean-data/
- https://davidwells.io/blog/clean-analytics
- https://databeats.community/p/product-analytics-components-of-event-data
变更日志
请参阅 CHANGELOG 了解最近的变化信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全漏洞
请参阅 我们的安全策略 了解如何报告安全漏洞。
致谢
许可证
MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。