phossa2 / config
一个简单、易于使用但功能强大的PHP配置管理库。
README
请使用 phoole/config 库代替
phossa2/config 是一个简单、易于使用但功能强大的PHP配置管理库。其设计灵感来自另一个github项目 mrjgreen/config,但增加了许多酷炫的功能。
它需要PHP 5.4,支持PHP 7.0+和HHVM。它符合 PSR-1、PSR-2、PSR-4。
安装
通过 composer
工具安装。
composer require "phossa2/config=2.*"
或者在您的 composer.json
文件中添加以下行
{ "require": { "phossa2/config": "2.*" } }
功能
-
简单的接口,
get($id, $default = null)
和has($id)
。 -
一个集中地点用于管理所有配置文件。
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}
。 -
按需配置加载(懒加载)。
-
使用点表示法如
db.auth.host
的层次结构配置结构。 -
数组访问 以便于使用。例如
$config['db.user'] = 'www';
。 -
引用查找 委派 和配置链。
-
支持
.php
、.json
、.ini
、.xml
和.serialized
类型的配置文件。
用法
-
通常应用运行环境在不同服务器上可能不同。一种好的做法是在主机上的某个位置设置环境变量,并将所有配置文件放在一个集中的
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 Phossa2\Config\Config; use Phossa2\Env\Environment; use Phossa2\Config\Loader\ConfigFileLoader; // load environment from '.env' file (new Environment())->load(__DIR__ . '/.env'); // create config instance with the config file loader $config = new Config( new ConfigFileLoader( getenv('CONFIG_DIR'), getenv('APP_ENV') ) ); // object access of $config $db_config = $config->get('db'); // array access of $config $config['db.user'] = 'www';
-
-
配置分组
将配置收集到一个目录中,并按文件和子目录分组,以便于管理。
例如,
config/system.php
包含system.*
配置// system.php return [ 'tmpdir' => '/usr/local/tmp', // ... ];
稍后,可以通过以下方式检索与
system
相关的配置// object acess of config $dir = $config->get('system.tmpdir'); // array access of $config $dir = $config['system.tmpdir'];
或者在其他配置中使用 引用。
-
配置文件加载顺序
如果环境设置为
production/host1
,则配置文件的加载顺序为,-
config/config/*.php
-
config/production/*.php
-
config/production/host1/*.php
配置值将被覆盖,并替换那些后来加载的文件中的值。
-
-
-
引用可以让你轻松管理配置。
例如,在
system.php
// group: system return [ 'tmpdir' => '/var/local/tmp', ... ];
在你的
cache.php
文件中,// group: cache 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('%{', '}%');
-
Config
类实现了ArrayAccess
接口。因此,配置值可以像数组一样访问。// test if (!isset($config['db.auth.user'])) { // set $config['db.auth.user'] = 'www'; }
使用点表示法如
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' ];
-
-
配置委托
引用查找委托类似于 Interop Container Delegate Lookup 的委托理念
-
对
get()
方法的调用应仅返回配置注册表中的条目。如果条目不是注册表的一部分,则返回NULL
,如ConfigInterface
中所述。 -
对
has()
方法的调用应仅在条目是配置注册表的一部分时返回 true。如果条目不是注册表的一部分,则应返回 false。 -
如果获取的条目有依赖项(引用),则 代替 在此配置注册表中执行引用查找,而是在委托器上执行查找。
-
重要 默认情况下,查找 应该 仅在委托器上执行,而不是在配置注册表本身上。
$config1 = new Config(); $config2 = new Config(); $delegator = new Delegator(); // add some values $config1['db.user'] = '${system.user}'; $config2['system.user'] = 'root'; // reference unresolved in $config1 var_dump($config1['db.user'] === '${system.user}'); // true // add both configs to the delegator $delegator->addConfig($config1); $delegator->addConfig($config2); // reference resolved thru the delegator var_dump($config1['db.user'] === 'root'); // true
Delegator
类实现了ConfigInterface
和ArrayAccess
接口,因此可以像普通配置一样使用。$dbUser = $delegator['db.user'];
-
-
配置链
通过多级委托可以实现配置链。例如,
// configs $config1 = new Config(); $config2 = new Config(); // delegators $delegator1 = new Delegator(); $delegator2 = new Delegator(); // register $config1 with $delegator1 $delegator1->addConfig($config1); // chaining $delegator2->addConfig($delegator1); $delegator2->addConfig($config2); // get from the chain $db = $delegator2->get('db');
-
APIs
-
-
get(string $id, $default = null): mixed
$default
在找不到配置值时使用。返回值可能是
string
、array
或甚至object
。 -
has(string $id): bool
测试
$id
是否存在。返回一个boolean
值。
-
-
-
set(string $id, mixed $value): bool
在此 会话 中手动设置配置。除非您手动修改配置文件,否则该值不会反映在任何配置文件中。
$value
可能是string
、array
或object
。可以通过以下方式禁用此功能:
// disable writing to the $config $config->setWritable(false);
-
setWritable(bool $writable): bool
启用或禁用
set()
功能。成功时返回true
。 -
isWritable(): bool
测试当前配置是否可写。
-
-
-
setReferencePattern(string $start, string $end): $this
重置引用开始字符和结束字符。默认为
'${'
和}'
-
hasReference(string $string): bool
测试
$string
中是否存在引用 -
deReference(string $string): mixed
取消引用
$string
中的所有引用。结果可能是string
、array
或甚至object
。 -
deReferenceArray(mixed &$data): $this
递归取消引用
$data
中的所有内容。$data
可能是string
或array
。其他数据类型将被忽略并保持不变。
-
-
-
addConfig(ConfigInterface $config): $this
向委托器添加一个
Phossa2\Config\Interfaces\ConfigInterface
实例。
-
-
-
setErrorType(int $type): $this
请为配置设置
Config::ERROR_IGNORE
、Config::ERROR_WARNING
或Config::ERROR_EXCEPTION
。
-
变更日志
请参阅CHANGELOG获取更多信息。
测试
$ composer test
贡献
请参阅CONTRIBUTE获取更多信息。
依赖
-
PHP >= 5.4.0
-
phossa2/shared >= 2.0.21