vitral / queasy-config
配置类(目前支持PHP、INI、XML和JSON配置),属于QuEasy PHP框架的一部分
Requires
- php: >=5.3.0|>=7.0.0
- v-dem/queasy-helper: dev-master
Requires (Dev)
- php: >=7.2.0
- phpunit/phpunit: *
This package is auto-updated.
Last update: 2024-09-18 06:35:58 UTC
README
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()
函数用于执行此表达式。
可以通过这种方式混合不同的配置格式。
合并配置
您可以使用 Config
的 merge()
方法合并两个配置。例如,您可以有默认配置,并允许用户添加或覆盖某些选项
$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