flagception/database-activator

数据库管理的功能开关激活器

1.1.4 2023-11-29 21:05 UTC

This package is auto-updated.

Last update: 2024-08-30 00:06:10 UTC


README

使用SQL数据库(mysql, postgres, sqlite, ...)来管理Flagception的功能开关!

下载库

打开命令行控制台,进入您的项目目录,并执行以下命令以下载此库的最新稳定版本:

$ composer require flagception/database-activator

用法

只需创建一个新的DatabaseActivator实例并将其提交到您的功能管理器。

// YourClass.php

class YourClass
{
    public function run()
    {
        $activator = new DatabaseActivator(['url' => 'mysql://user:secret@localhost/mydb']);
        
        $manager = new FeatureManager($activator);
        if ($manager->isActive('your_feature_name')) {
            // do something
        }
    }
}

连接

此激活器在底层使用dbal。我们将第一个参数直接传递给dbal,因此您可以使用所有已知的连接选项(参见文档

用户名和密码
// YourClass.php

class YourClass
{
    public function run()
    {
        $activator = new DatabaseActivator([
            'dbname' => 'mydb',
            'user' => 'user',
            'password' => 'secret',
            'host' => 'localhost',
            'driver' => 'pdo_mysql'
        ]);
        
        // ...
    }
}
连接字符串
// YourClass.php

class YourClass
{
    public function run()
    {
        $activator = new DatabaseActivator([
            'url' => 'mysql://user:secret@localhost/mydb'
        ]);
        
        // ...
    }
}
PDO实例
// YourClass.php

class YourClass
{
    public function run()
    {
        $activator = new DatabaseActivator([
            'pdo' => $this->myPdoInstance
        ]);
        
        // ...
    }
}
DBAL实例
// YourClass.php

class YourClass
{
    public function run()
    {
        $activator = new DatabaseActivator($this->myDbalInstance);
        
        // ...
    }
}

如果表不存在,激活器将创建SQL表。默认表名为flagception_features,其中包含featurestate列。您可以通过第二个参数更改表和列名。它期望一个包含值为db_tabledb_column_featuredb_column_state的数组。设置其中一个字段是可选的。

示例

// YourClass.php

class YourClass
{
    public function run()
    {
        $activator = new DatabaseActivator(['url' => 'mysql://user:secret@localhost/mydb'], [
            'db_table' => 'my_feature_table',
            'db_column_feature' => 'foo_feature_name',
            'db_column_state' => 'foo_is_active'
        ]);
        
        // The activator create a table 'my_feature_table' with the column 'foo_feature_name' and 'foo_is_active'.
        
        $manager = new FeatureManager($activator);
        if ($manager->isActive('your_feature_name')) {
            // do something
        }
    }
}