carstenwindler / config
非常简单的配置
Requires
- php: ^7.3 || ^8.0
Requires (Dev)
- phpstan/phpstan: ^0.12.86
- phpunit/phpunit: ^9
- scrutinizer/ocular: ^1.8
- symplify/easy-coding-standard: ^9
This package is auto-updated.
Last update: 2024-09-11 04:38:18 UTC
README
关于此包
这是一个非常简单的配置包。使用它来初始化并访问您的PHP应用程序中的配置设置。
简洁、经过测试、从PHP 7.3开始支持,并且不会向您的代码库添加任何其他依赖项。
要求
- PHP 7.3(或更高版本)
是的,就是这样。
安装
通过composer
$ composer require carstenwindler/config
为什么还需要另一个配置包?
这个包最初是一个更简单的配置类,我将其添加到项目中一次,并且一直在使用和改进它。添加一些点,我决定将其发布为包。当然,使用其他(更大的)包肯定有很好的理由,但如果您只需要一个不会给您的项目添加任何开销的配置类,这可能是一个正确的选择。
级联配置
这个Config包背后的基本思想是“级联配置”的概念:您不是一次性加载整个配置,而是逐步构建。
main.php
\- environment/develop.php
\- markets/my_market.php
您从一个“主配置”开始,它包含所有目的的基本配置,然后根据您所处的环境添加更多(或覆盖以前的)配置。例如,在本地开发环境中,您可能希望使用与生产环境不同的Web服务版本。
简单的“数组点”表示法
使用“数组点”表示法来指定配置项(例如'lvl1.lvl2.lvl3.foo'
)是最快、最简单的方法。
但这有一个很大的缺点——配置使用字符串来指定,这很容易导致“腐烂的配置”。请查看下面的“严格模式”部分了解如何解决这个问题。
用法
初始化
有三种方法可以设置配置。
从文件加载
通常,应用程序配置简单地存储在文件中,因此这是Config的标准用例。
Config仅使用PHP数组作为唯一的配置格式。要将数组存储在文件中,您可以使用此表示法,例如
<?php return [ 'my_config' => [ 'key1' => 'value1', 'key2' => 'value2', ] ];
为什么只使用PHP数组?因为它们简单、强大、快速并且支持良好。如果您想或需要以例如YAML格式存储配置,您需要自己添加该功能,例如通过加载YAML并将其转换为数组,然后将其传递给Config。
// load config from file with full path $config = (new Config)->addConfigFile('/app/root/config/main_config.php');
// set the folder /app/root/config as your configuration folder $config = (new Config)->setConfigPath('/app/root/config'); // load config from file /app/root/config/main_config.php $config->addConfigFile('main_config.php'); // additionally, merge the config from /app/root/config/environment/develop.php $config->addConfigFile('environment/develop.php');
从数组加载
通常,您会使用这种方法在测试期间设置配置。
$myConfiguration = [ 'key' => 'value' ]; $config = (new Config)->addConfigArray($myConfiguration); $myOtherConfiguration = [ 'key2' => 'value2' ]; $config->mergeConfig($myOtherConfiguration);
直接设置配置
通常,您会使用这种方法在测试期间设置配置。
$config = (new Config)->set('my.config.value.one', 12345);
在运行时检索和操作配置
$myConfiguration = [ 'lvl1' => [ 'test' => 'value', 'lvl2' => [ 'foo' => 'wrong', 'lvl3' => [ 'foo' => 'baz', ] ], ], ]; $config = (new Config)->setConfigArray($myConfiguration); echo $config->get('lvl1.lvl2.lvl3.foo'); // echoes "baz" echo $config->set('lvl1.lvl2.foo', 'bar'); echo $config->get('lvl1.lvl2.foo'); // echoes "bar"
如果您希望所需的值不存在,可以指定默认值
echo $config->get('lvl1.lvl2.lvl3.nope', 'foo'); // echoes "foo"
否则,返回值将为null
is_null($config->get('lvl1.lvl2.lvl3.nope')); // true
请参阅下面的“严格模式”部分以获取更多选项!
严格模式
为了避免在代码库中使用不存在的配置项,您可以打开“严格模式”。如果所需的值不存在,Config将抛出异常而不是返回null。
这可以揭示配置中的问题,但是您**不应在生产环境中启用它**。它主要用于本地或CI构建。
故障排除
- 没有开箱即用的yml支持?你在开玩笑吗?不。Yml是一个很好的格式,但您可能不需要在项目中使用它。您仍然可以使用YAML加载器(如mustangostang/spyc)将yml加载为数组,并将其传递给Config。
待办事项
- 对函数名称进行对齐(例如,add() 和 mergeConfig() 基本上执行相同的操作,只是来源不同)