freezemage0 / config
小型配置文件管理库。
Requires
- php: ^7.4
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^9.4.0
- vimeo/psalm: ^4
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()
方法注册它们。所有自定义导入器和导出器都必须分别实现 ImporterInterface
和 ExporterInterface
。
<?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
异常。