vitral/queasy-config

配置类(目前支持PHP、INI、XML和JSON配置),属于QuEasy PHP框架的一部分

1.0.0 2023-09-02 13:51 UTC

This package is auto-updated.

Last update: 2024-09-18 06:35:58 UTC


README

Codacy Badge Build Status codecov Mutation testing badge Total Downloads License

QuEasy PHP框架 - 配置

vitral/queasy-config

此包包含一组用于读取配置文件的类。目前支持的格式包括

  • PHP
  • INI
  • JSON
  • XML
  • CLI(命令行)

特性

  • 易于使用 - 就像嵌套数组或对象一样。同时,您还可以使用 foreach() 与配置实例一起使用。
  • 支持默认选项值。
  • 支持多文件配置。您可以根据需要将配置拆分成多个文件,而无需更改程序代码。
  • 选项继承。如果当前配置级别缺少选项,它将在这个选项的上一级查找此选项。
  • 统一的配置接口。您可以在不同的配置格式之间切换,而无需更改您的代码。
  • 易于扩展其他配置格式。
  • 支持正则表达式(可以通过正则表达式获取配置选项)。

要求

  • PHP版本5.3或更高

参考

请参阅Wiki页面

安装

> composer require v-dem/queasy-config:master-dev

使用

让我们假设我们有一个以下的 config.php

return [
    'connection' => [
        'driver' => 'mysql',
        'host' => 'localhost',
        'name' => 'test',
        'user' => 'root',
        'password' => 'secret'
    ]
];

或者 config.ini

[connection]
driver = mysql
host = localhost
name = test
user = root
password = secret

或者 config.json

{
    "connection": {
        "driver": "mysql",
        "host": "localhost",
        "name": "test",
        "user": "root",
        "password": "secret"
    }
}

或者 config.xml

<?xml version="1.0">
<config>
    <connection
        driver="mysql"
        host="localhost"
        name="test"
        user="root"
        password="secret" />
</config>

您可以将不同的配置类型混合使用,例如,顶级PHP类型的配置可以引用其他类型的配置文件。

创建配置实例

包含Composer自动加载器

require_once('vendor/autoload.php');

创建配置实例(配置文件类型将由文件名扩展名检测)

$config = new queasy\config\Config('config.php'); // Can be also '.ini', '.json' or '.xml'

访问配置实例

现在您可以通过以下方式访问配置部分和选项

$databaseName = $config->database->name;

或者

$databaseName = $config['database']['name'];

如果选项缺失,可以使用默认值

// If 'host' is missing in config, 'localhost' will be used by default
$databaseHost = $config['database']->get('host', 'localhost');

更简短的方式

// If 'host' is missing in config, 'localhost' will be used by default
$databaseHost = $config['database']('host', 'localhost');

您还可以指定一个选项是必需的,如果该选项缺失,则抛出 ConfigException

// Throw ConfigException if 'name' is missing
$databaseName = $config['database']->need('name');

如何检查配置中是否存在某个部分或选项

$hasDatabaseName = isset($config['database']);
$hasDatabaseName = isset($config['database']['name']);

如果您在访问非常嵌套的选项时不想检查每个部分的是否存在,可以使用这个技巧

// $databaseName will contain 'default' if 'name' and/or 'database' options are missing
$databaseName = $config->get('database', [])->get('name', 'default');

更简短的方式

// $databaseName will contain 'default' if 'name' and/or 'database' options are missing
$databaseName = $config('database', [])('name', 'default');

多文件配置

config.php:

return [
    'connection' => [
        'driver' => 'mysql',
        'host' => 'localhost',
        'name' => 'test',
        'user' => 'root',
        'password' => 'secret'
    ],
    'queries' => new queasy\config\Config('queries.php') // Can be config of another type (INI, JSON etc)
];

queries.php:

return [
    'selectActiveUsers' => 'SELECT * FROM `users` WHERE `is_active` = 1'
];

访问

$config = new queasy\config\Config('config.php');
$query = $config['queries']['selectActiveUsers'];

其他配置格式几乎相同

config.ini:

[connection]
driver = mysql
host = localhost
name = test
user = root
password = secret
queries = "@queasy:new queasy\config\Config('queries.ini')"

@queasy: 之后可以有任何PHP代码,因此可以使用PHP常量等。请注意,eval() 函数用于执行此表达式。

可以通过这种方式混合不同的配置格式。

合并配置

您可以使用 Configmerge() 方法合并两个配置。例如,您可以有默认配置,并允许用户添加或覆盖某些选项

$defaultConfig = new queasy\config\Config('defaults.php');
$optionalConfig = new queasy\config\Config($arrayWithOptionsToAddOrOverride);
$defaultConfig->merge($optionalConfig);

使用CLI配置类型

作为补充,您可以使用命令行参数作为CLI脚本的配置选项源(只需使用 .cli 扩展名,它将创建适当的加载器)

$config = new queasy\config\Config('.cli');

选项应通过这种方式传递(遗憾的是,目前只支持这种方式)

> php test.php option1=123 option2="some text"

我认为在那里使用 merge() 方法是有用的 - 默认配置文件和命令行中的可选参数。

测试

由于PHPUnit要求,测试可以在最低PHP 7.2版本下运行。要运行它们,请使用

> composer test