krak/symfony-rollout-rox

Symfony与Rollout Rox库集成

安装次数: 5,521

依赖者: 0

建议者: 0

安全: 0

星星: 0

关注者: 2

分支: 0

公开问题: 0

类型:symfony-bundle

v0.1.0 2020-11-10 15:32 UTC

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类来查看简单的实现。