krak / symfony-rollout-rox
Symfony与Rollout Rox库集成
Requires
- rollout/rox: ^4.7
Requires (Dev)
- nyholm/symfony-bundle-test: ^1.6
- phpunit/phpunit: ^8.5
- symfony/dependency-injection: ^4.4
- symfony/http-kernel: ^4.4
- symfony/var-dumper: ^5.1
This package is not auto-updated.
Last update: 2024-09-12 07:55:47 UTC
README
Symfony扩展包,集成了CloudBees功能标志(Rox by Rollout)php SDK。
安装
使用composer安装krak/symfony-rollout-rox
。
如果symfony的composer install没有自动注册包,你可以手动注册
<?php return [ //... Krak\SymfonyRox\RoxBundle::class => ['all' => true], ];
使用
配置应用程序环境键
通过ENV
设置环境变量ROLLOUT_ROX_APP_ENV_KEY
,系统将自动使用该键进行配置。
通过参数
应用程序环境键设置在symfony参数rollout_rox_app_env_key
中。你可以在应用程序参数配置中直接设置此参数,例如
parameters: rollout_rox_app_env_key: 'key goes here'
注册容器
该Rox php库通过注册包含实验默认标志/变体的公共属性的对象容器来工作。Rox系统将自动将标志/变体注册到rollout api/admin界面。
要创建和注册一个容器,你可以实现RoxContainer接口。
<?php namespace App\FeatureFlags; use Krak\SymfonyRox\RoxContainer; use Rox\Server\Flags\RoxFlag; final class ProductContainer implements RoxContainer { public $showQtyOnPDP; public function __construct() { $this->showQtyOnPDP = new RoxFlag(false); } // the namespace controls the prefix used in the rollout admin // when displaying your flags or variants. Every container MUST have a unique // namespace. public function getNamespace(): string { return 'product'; } }
然后要在一个服务中使用该容器,你需要通过ContainerStore访问它。
<?php namespace App\Service; use Krak\SymfonyRox\RoxContainerStore; final class BuildPDPPrices { private $flagsStore; public function __construct(RoxContainerStore $flagsStore) { $this->flagsStore = $flagsStore; } public function __invoke(string $productId): array { $container = $this->flagsStore->get(\App\FeatureFlags\ProductContainer::class); return [ 'qty' => $container->showQtyOnPDP->isEnabled() ? 1 : null, 'price' => 100, ]; } }
ContainerStore用于延迟初始化Rox系统。并非所有请求都需要使用功能标志,因此包不会初始化,直到从存储中访问容器。
自定义Rox设置
调整Rox选项
如果你只需要修改将传递给Rox::setup的RoxOptions,则可以设置一个工厂来构建RoxOptions,然后为这些rox选项添加服务定义,然后更新RoxSetup服务定义参数以接受RoxOptions作为第二个参数。
高级自定义
如果你想要在注册和设置以及任何其他钩子上拥有更多灵活性,最好实现自己的RoxSetup实例,然后为RoxSetup注册服务,而不是默认的,或者你也可以使用装饰器, whatever works best for you。
你可以查看GlobalDefaultRoxSetup类来查看简单的实现。