freezemage0/config

小型配置文件管理库。

3.0.0 2023-05-19 08:14 UTC

This package is auto-updated.

Last update: 2024-09-19 10:58:34 UTC


README

freezemage0/config 是一个库,提供了一种轻松读取和创建配置文件的方法。支持 .json.ini.php 格式。

安装

您可以使用 composer 安装此包: composer require freezemage0/config

用法

ConfigFactory

ConfigFactory 会自动解析配置的导入器和导出器。解析基于文件扩展名。

用法示例

创建配置对象
<?php


use Freezemage\Config\ConfigFactory;


$factory = new ConfigFactory();
$config = $factory->create($_SERVER['DOCUMENT_ROOT'] . '/config.json');

返回的配置文件将准备好从 config.json 文件解码和编码 JSON 数据。

注册自定义导入器和导出器

您可能想创建自己的导入器或导出器。在这种情况下,您可以使用 ConfigFactory::registerImporter()ConfigFactory::registerExporter() 方法注册它们。所有自定义导入器和导出器都必须分别实现 ImporterInterfaceExporterInterface

<?php


use Freezemage\Config\ConfigFactory;
use Freezemage\Config\Importer\ImporterInterface;


class MyImporter implements ImporterInterface {
    private $filename;
    
    public function import(): array {
        //import operation here
    }
    
    public function setFilename(string $filename): void {
        $this->filename = $filename;
    }
    
    public function getFilename(): ?string {
        return $this->filename;
    }
}

$factory = new ConfigFactory();
$factory->registerImporter('my-file-extension', new MyImporter());

ImmutableConfig

基本配置类,提供读取、设置和保存配置的方法。此类的实例是不可变的,这意味着对 set() 的任何调用都将返回一个新实例。

基本用法

可以通过调用 ImmutableConfig::get() 方法通过键检索特定值。可以通过调用 ImmutableConfig::getConfig() 方法检索所有配置值。配置按需加载。

<?php


use Freezemage\Config\ConfigFactory;


$factory = new ConfigFactory();
$config = $factory->create($_SERVER['DOCUMENT_ROOT'] . '/config.json');

$database = $config->get('database'); // Loads whole config and returns value
$allValues = $config->getConfig(); // Uses previously loaded values.

键链式调用

ImmutableConfig 的 get/set 方法支持 键链式调用。这意味着您可以使用点 (.) 来连接配置的嵌套键以获取嵌套值。以下是一个配置示例

<?php

array(
    'database' => array(
        'username' => 'user',
        'password' => 'passwd'
    )
);

您可以使用以下调用检索数据库连接的 username

<?php


use Freezemage\Config\ConfigFactory;


$factory = new ConfigFactory();
$config = $factory->create($_SERVER['DOCUMENT_ROOT'] . '/config.json');

$username = $config->get('database.username');
echo $username; // prints "user"

功能管理

本地管理

要禁用/启用 ImmutableConfig 当前实例的 key chaining,请调用 ImmutableConfig->disableKeyChaining()

全局管理

如何禁用/启用 ConfigFactory 对象创建的所有实例的 key chaining 的示例

<?php

use Freezemage\Config\ConfigFactory;

$factory = new ConfigFactory();
$factory->getFeatureManager()->getKeyChaining()->disable();

$config = $factory->create('config.json'); // key chaining will be disabled for that instance.

保存

您还可以使用 ImmutableConfig::set() 方法创建/编辑配置。设置值时,您将获得一个带有新 key => value 对的新 ImmutableConfig 实例。这样做是为了在您准备好保存之前保留原始配置的不可变性。

<?php


use Freezemage\Config\Importer\JsonImporter;
use Freezemage\Config\Exporter\JsonExporter;
use Freezemage\Config\ImmutableConfig;

$importer = new JsonImporter();
$exporter = new JsonExporter();

$importer->setFilename($_SERVER['DOCUMENT_ROOT'] . '/connection.json'); // Implying that file exists. 

$config = new ImmutableConfig($importer, $exporter);
$config = $config->set('database', array('username' => 'user')); // New ImmutableConfig is created.
$config->set('database.password', 'passwd')->save(); // Key chaining is supported for setter as well.

如果您使用不带要导入的文件的 ImmutableConfig 创建新实例,则它将被创建。如果 ImmutableConfig 内的 Exporter 没有文件名,则它将基于配置内容生成。相同的配置导致相同的文件名。生成的配置名称可以通过 ImmutableConfig->getExporter()->getFilename() 获取

部分提取

您可以从配置中提取部分并作为 ImmutableConfig 的单独实例来处理。提取的 ImmutableConfig 部分将表现得就像它是根部分一样。请注意,调用 ImmutableConfig->save() 将重写原始配置文件的内容,除非您做如下操作

<?php


use \Freezemage\Config\ConfigFactory;


$factory = new ConfigFactory();
$config = $factory->create('config.json');
$database = $config->extractSection('database');
$database->getExporter()->setFilename('database.json');
$database->save(); // the content of database section will be saved into a separate 'database.json' file.

配置转换

您可能想将配置从 .json 转换为 .php 格式。以下示例正是如此

<?php


use Freezemage\Config\ConfigFactory;
use Freezemage\Config\Exporter\PhpExporter;


$factory = new ConfigFactory();

$configName = $_SERVER['DOCUMENT_ROOT'] . '/config.json';
$config = $factory->create($configName);

$exporter = new PhpExporter();
$exporter->setFilename($configName);

$config->setExporter($exporter);
$config->save();

注意事项

嵌套部分不受 IniExporter 支持(因为它们通常不受任何人支持)。
使用嵌套部分调用 IniExporter->export() 将会抛出 UnsupportedNestingException 异常。