chilimatic / config-component
chilimatic框架中的配置组件
Requires
- php: >=7
- chilimatic/datastructure-component: 2.*
- chilimatic/interfaces-component: 2.*
Requires (Dev)
- phpunit/phpunit: 4.8.*
This package is auto-updated.
Last update: 2024-09-09 13:06:33 UTC
README
chilimatic config-component
文件对象是为多域架构构建的
思路非常简单,你创建一个配置目录,每个配置文件都有.cfg扩展名,对象将根据服务器提供的host_id创建一个列表。如果没有设置参数host_id,它将尝试通过$_SERVER ['HTTP_HOST']确定id,或者尝试使用从cli使用的host参数。
php myscript.php host=www.example.com
如果仍然找不到host_id,它将抛出异常。
$config = new File( [ \chilimatic\lib\Config\Adapter\File::CONFIG_PATH_INDEX => __DIR__ . '/test/data', \chilimatic\lib\Config\Adapter\File::HOST_ID_KEY => 'www.example.com' ] );
它将根据分隔符生成一组可能的配置,分隔符默认为*,对于Windows机器,你可以将其切换为all。
在我们的例子中,生成的集合如下所示
[
'*.cfg',
'*.example.com.cfg',
'www.example.com.cfg'
]
如前所述,您可以将Windows机器的分隔符更改为all
[
'all.cfg',
'all.example.com.cfg',
'www.example.com.cfg'
]
所有系统都将使用*.cfg,然后按层次结构覆盖它
值存储在双向链表中,所以所有的值都保留,但通常配置返回特定键的最后一个附加值
$config = new File( [ \chilimatic\lib\Config\Adapter\File::CONFIG_PATH_INDEX => __DIR__ . '/test/data', \chilimatic\lib\Config\Adapter\File::HOST_ID_KEY => 'www.example.com' ] ); $config->set('key1', ['some', 'data']); $config->set('key1', implode(' ', $config->get('key1'))); echo $config->get('key1'); // will return 'some data'
配置实现了自己的解析器,允许您编写如下配置
#cache settings
cache_type = 'memcached'
cache_settings = { "server_list" : [{"host" : "127.0.0.1", "port" : "11211", "weight" : 1 }] }
// it is possible to read serialized data but as we all know this can lead to chaos :)
// so stick to json if possible
serializedString = a:2:{s:2:"my";s:3:"key";s:5:"value";O:8:"stdClass":0:{}}
注释定义为//或#,并将添加到节点中;
库包含一个标准的工厂模式,可以通过静态方式访问
\chilimatic\lib\Config\ConfigFactory::make( 'file', [ \chilimatic\lib\Config\Adapter\File::CONFIG_PATH_INDEX => __DIR__ . '/test/data', \chilimatic\lib\Config\Adapter\File::HOST_ID_KEY => 'www.example.com' ] ); // returns the same as the example above
以及一个单例配置包装器,它利用工厂创建一个配置,允许您进行静态访问。
// passed reference $config = \chilimatic\lib\Config\Config::getInstance( 'file', [ \chilimatic\lib\Config\Adapter\File::CONFIG_PATH_INDEX => __DIR__ . '/test/data', \chilimatic\lib\Config\Adapter\File::HOST_ID_KEY => 'www.example.com' ] ); // also accessable via Config::set('my variable', 'my value); Config::get('my variable');
您可以查看benchmark.php和单元测试。
如果您只想使用ini文件,可以使用ini适配器
$config = new \chilimatic\lib\Config\Adapter\Ini( [ \chilimatic\lib\Config\Adapter\Ini::FILE_INDEX => __DIR__ . '/test/data/' ] );
如果您只传递一个目录,它将扫描所有具有.ini扩展名的文件。它将基于扫描顺序递归合并它们,然后将它们传递到配置对象的节点图结构中。
如果您传递一个特定文件,它将仅使用此文件。
计划中的下一步是新的引擎,目前它是一个类似DOM的结构,具有索引,这可能有些过度,也许其他人更喜欢扁平的哈希图结构。
也许JSON适配器也不错。