andym84 / config
配置管理
1.3.0
2024-07-02 00:29 UTC
Requires
- php: >=8.3
Requires (Dev)
- phpunit/phpunit: ^9
README
一个简单(但有效!)的系统,用于管理配置文件的不同版本及其设置。
开发设置
使用此系统不需要除PHP(当然)之外的任何依赖项,但如果您想使用源代码并运行测试,请随意克隆或下载存储库,并从存储库根目录运行以下命令
composer update vendor/bin/phpunit -c phpunit.xml ./Tests
安装
与大多数东西一样,我已经通过Composer提供此功能,您可以将 "andym84/config": "^1.0"
添加到您的 composer.json
中,或者您可以直接执行以下命令
composer require andym84/config
当然,您也可以直接下载源代码并手动引用。
用法
使用此系统需要至少两个东西
- 一个执行
Migrator
的脚本 - 一个包含一个或多个指令文件的文件夹
假设您将使用名为 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.cfg
和 1-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