chilimatic/config-component

chilimatic框架中的配置组件

2.1.0 2016-08-03 19:18 UTC

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适配器也不错。