phoole / config
一个轻量级的PHP配置加载库。
Requires
- php: >=7.2.0
- phoole/base: ~1.0.21
Requires (Dev)
- phpunit/phpunit: ^8
README
一个轻量级的PHP配置加载库。它加载PHP、JSON、YAML配置文件,易于使用,但功能强大。它需要PHP 7.2+,并且符合 PSR-1、PSR-4、PSR-12。
安装
通过 composer
工具安装。
composer require "phoole/config=1.*"
或者将以下行添加到您的 composer.json
{ "require": { "phoole/config": "1.*" } }
特性
-
简单的接口,
get($id)
、has($id)
、with($id, $value)
。 -
一个中心位置,方便管理所有配置文件。
config/ | |___ production/ | | | |___ host1/ | | |___ db.php | | |___ redis.php | | | |___ db.php | |___ dev/ | | | |___ redis.php | |___ db.php | |___ db.php |___ redis.php |___ system.php
-
可以使用 环境 值,例如
production
或production/host1
在不同配置之间切换。 -
配置值中的 引用 完全支持,例如
${system.tmpdir}
。 -
使用
$config->get('ENV.USER')
或${ENV.USER}
获取环境值 -
使用点表示法 dot notation 的层次配置结构,如
db.auth.host
。 -
支持
.php
、.json
、.yml
(需要安装yaml扩展) 类型的配置文件。
用法
-
通常应用程序在不同的服务器上运行的环境不同。一个良好的做法是在主机的某个位置设置环境,并将所有配置文件放在一个中心的
config/
目录中。一个示例
.env
文件,# installation base BASE_DIR=/www # app directory APP_DIR=${BASE_DIR}/app # config directory CONFIG_DIR=${APP_DIR}/config # app env for current host APP_ENV=production/host1
在一个示例
bootstrap.php
文件中,use Phoole\Config\Config; use Phoole\Env\Environment; // load server environment from '.env' file (new Environment())->load(__DIR__ . '/.env'); // create config instance with the config file loader $config = new Config(getenv('CONFIG_DIR'), getenv('APP_ENV')); // object access of $config $db_config = $config->get('db');
-
-
配置分组
配置收集到一个目录中,并按文件和子目录分组,以便于管理。
例如,
config/system.php
包含system.*
配置// system.php return [ 'tmpdir' => '/usr/local/tmp', // ... ];
稍后,可以使用以下方式检索与
system
相关的配置$dir = $config->get('system.tmpdir');
或者在其他配置中作为 引用 使用。
-
配置文件加载顺序
如果环境设置为
production/host1
,配置文件的加载顺序是(假设配置文件是*.php
),-
config/config/*.php
-
config/production/*.php
-
config/production/host1/*.php
配置值将被覆盖,并替换那些后来加载的文件中的值。
-
-
-
引用使您的配置易于管理。
例如,在
system.php
中return [ 'tmpdir' => '/var/local/tmp', ... ];
在您的
cache.php
文件中,return [ // a local filesystem cache driver 'local' => [ 'driver' => 'filesystem', 'params' => [ 'root_dir' => '${system.tmpdir}/cache', // use reference here 'hash_level' => 2 ] ], ... ];
您可以重新设置引用的开始和结束匹配模式如下,
// now reference is something like '%{system.tmpdir}%' $config->setReferencePattern('%{', '}%');
-
环境值可以通过特殊节点
'ENV'
访问。例如。$tmpdir = $config->get('ENV.APP_TMPDIR');
或者以引用格式,
return [ 'tmpdir' => '${ENV.APP_TMPDIR}' ];
-
使用点表示法
db.auth.host
的层次配置结构。// returns the db config array $db_config = $config->get('db'); // returns a string $db_host = $config->get('db.auth.host');
支持扁平表示法和数组表示法,并且可以同时存在。
// db config file return [ // array notation 'auth' => [ 'host' => 'localhost', 'port' => 3306 ], // flat notation 'auth.user' => 'dbuser' ];
-
在初始加载后,
$config
是不可变的。如果您想添加新的配置值,您可以使用,$newconf = $config->with('redis', ['host' => 'localhost']);
其中
$newconf
是一个新配置对象。
APIs
-
-
get(string $id): mixed
返回值可能是一个
string
、array
或甚至object
。如果未找到,则返回null
。 -
has(string $id): bool
测试
$id
是否存在。返回一个boolean
值。 -
with(string $id, mixed $value): Config
返回一个新的配置对象,其中
$id
已设置。
-
-
-
setReferencePattern(string $start, string $end): $this
重置引用的开始和结束字符。默认为
'${'
和}'
-
测试
$ composer test
依赖
- PHP >= 7.2.0