andym84/config

1.3.0 2024-07-02 00:29 UTC

This package is auto-updated.

Last update: 2024-09-02 01:02:09 UTC


README

一个简单(但有效!)的系统,用于管理配置文件的不同版本及其设置。

Build Status

开发设置

使用此系统不需要除PHP(当然)之外的任何依赖项,但如果您想使用源代码并运行测试,请随意克隆或下载存储库,并从存储库根目录运行以下命令

composer update
vendor/bin/phpunit -c phpunit.xml ./Tests

安装

与大多数东西一样,我已经通过Composer提供此功能,您可以将 "andym84/config": "^1.0" 添加到您的 composer.json 中,或者您可以直接执行以下命令

composer require andym84/config

当然,您也可以直接下载源代码并手动引用。

用法

使用此系统需要至少两个东西

  1. 一个执行 Migrator 的脚本
  2. 一个包含一个或多个指令文件的文件夹

假设您将使用名为 cfgMigrations 的目录来存储指令文件,您的使用可能就像这样

require('vendor/autoload.php');

use AndyM84\Config\ConfigContainer;
use AndyM84\Config\Migrator;

// Perform any required migrations
$migrator = new Migrator('cfgMigrations');
$migrator->migrate();

// Consume the config file for easy use
$cfg = new ConfigContainer(file_get_contents('siteSettings.json'));

echo($cfg->get('configVersion')); // Echos whatever version your configs are at after migration

考虑您的 cfgMigrations 目录中的以下两个指令文件,0-1.cfg1-2.cfg

cfgMigrations/0-1.cfg

siteVersion[str] + 1.0.0
siteTitle[str] + Default Title

cfgMigrations/1-2.cfg

siteTitle > frontTitle
backTitle[str] + Default Backend Title
smtp.host[str] + localhost
smtp.port[int] + 25
corsOrigins[str[]] + https://
corsOrigins[str[]] + https://mydomain.com

如果您运行这些迁移,系统将生成以下 siteSettings.json 文件

{
    "schema": {
        "configVersion": "int",
        "siteVersion": "str",
        "frontTitle": "str",
        "backTitle": "str",
        "smtp.host": "str",
        "smtp.port": "int",
        "corsOrigins": "str[]"
    },
    "settings": {
        "configVersion": 2,
        "siteVersion": "1.0.0",
        "frontTitle": "Default Title",
        "backTitle": "Default Backend Title",
        "smtp": {
          "host": "localhost",
          "port": 25
        },
        "corsOrigins": [
          "https://",
          "https://mydomain.com"
        ]
    }
}

配置迁移

每个配置迁移都是一个包含简单逐行指令的文件。文件名采用 <VERSION1>-<VERSION2>.cfg 的格式,这使得系统知道应该从哪个版本迁移到哪个版本。指令包含 2-3 个部分

<field-name-and-type> <operator>[ <value>]

前两个部分是必需的,第三个(value)部分根据所使用的操作员是可选的。以下是可以使用的操作符

+ Add field w/ value
> Rename field
= Change field value
- Remove field

有效的字段类型

int Integer
flt Float
str String
bln Boolean
int[] Array of Integers
flt[] Array of Floats
str[] Array of Strings
bln[] Array of Booleans

数组类型可以在迁移文件中添加、重命名或删除,但不能更改。

最后,当使用时,value 部分可以包含任何字符(除了换行符),以及以下特殊值

""          Empty string
${propName} Interpolates the value of an existing property (will not be replaced if the property doesn't exist)

最后,一个示例迁移脚本,3-4.cfg,它将配置文件从版本 3 迁移到 4

someVersion[str] + 1.1.2
ownerName[str] + Andrew Male
ownerFirstName -
ownerLastName > ownerSurname

此文件将按以下顺序执行以下操作

  • 添加具有值 1.1.2 的字符串属性 someVersion
  • 添加具有值 Andrew Male 的字符串属性 ownerName
  • 删除 ownerFirstName 属性
  • ownerLastName 属性重命名为 ownerSurname
  • 根据文件名将 configVersion 整数属性设置为 4