hellofresh/feature-toggle

此包已被废弃,不再维护。未建议替代包。

简单的功能切换机制

dev-master 2016-07-11 18:08 UTC

This package is not auto-updated.

Last update: 2020-08-21 20:26:30 UTC


README

Build Status Scrutinizer Code Quality Code Coverage Latest Stable Version Downloads

PHP的简单功能切换机制。

如果你不了解功能切换模式,请阅读这篇文章

安装

$ composer require hellofresh/feature-toogle

使用方法

让我们定义一个新的功能切换列表

  use HelloFresh\FeatureToggle\FeatureManager;
  use HelloFresh\FeatureToggle\Feature;
  use HelloFresh\FeatureToggle\OperatorCondition;
  use HelloFresh\FeatureToggle\Context;
  use Collections\ArrayList;
  
  $operator = new LessThan(42);
  $conditions = new ArrayList([new OperatorCondition('user_id', $operator)]);

  $manager = new FeatureManager();
  $manager
      ->addFeature(new Feature('feature1', $conditions))
      ->addFeature(new Feature('feature2', $conditions))
      ->addFeature(new Feature('feature3', $conditions))
      ->addFeature(new Feature('feature4', $conditions))
  ;

  $context = new Context([
      'user_id' => 42
  ]);
          
  if ($manager->isActive('feature2', $context)) {
       // The feature is active \o/ 
  }

从yaml文件中加载功能

    use HelloFresh\FeatureToggle\Context;
    use HelloFresh\FeatureToggle\FeatureManager;
    use HelloFresh\FeatureToggle\Serializer\Serializer;
    use Symfony\Component\Yaml\Yaml;
  
    $yaml = <<<YML
features:
  - name: some-feature
    conditions:
     - name: operator-condition
       key: user_id
       operator:
           name: greater-than
           value: 41
       status: conditionally-active
  - name: some-feature2
    conditions:
     - name: operator-condition
       key: user_id
       operator:
           name: greater-than
           value: 42
       status: conditionally-active
YML;

    $serializer = new Serializer();

    $features = $serializer->deserialize(Yaml::parse($yaml)['features']);
    $manager = new FeatureManager($features);

    $context = new Context();
    $context->set('user_id', 42);

    if ($manager->isActive('feature2', $context)) {
           // The feature is active \o/ 
    }

使用表达式怎么样?

use HelloFresh\FeatureToggle\FeatureManager;
use HelloFresh\FeatureToggle\Feature;
use HelloFresh\FeatureToggle\ExpressionCondition;
use HelloFresh\FeatureToggle\Context;
use Collections\ArrayList;
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;

$language   = new ExpressionLanguage();
$expression = new ExpressionCondition('user["active"] and product["price"] / 100 >= 0.2', $language);

$manager = new FeatureManager();
$manager->addFeature(new Feature('feature1', $expression));

// Create and check a new context and condition using symfony expression
$context = new Context();
$context->set('user', [
    'active' => true
]);

$context->set('product', [
    'price' => 30
]);
      
if ($manager->isActive('feature2', $context)) {
   // The feature is active \o/ 
}

贡献

请参阅CONTRIBUTING以获取详细信息。

许可

MIT许可(MIT)。请参阅许可文件以获取更多信息。