northwoods / config
简单的配置加载器
Requires
- php: >=7.0
Requires (Dev)
- eloquent/phony-phpunit: ^3.0
- squizlabs/php_codesniffer: ^3.0
- symfony/yaml: ^2.8 || ^3.0
Suggests
- josegonzalez/dotenv: Adds support for loading .env files
- symfony/yaml: Adds support for loading .yaml files
README
PHP配置加载库。它旨在使您的应用程序能够根据其运行的环境拥有不同的配置。例如,您的应用程序可以为测试、开发、预发布和生产使用不同的配置。
**不推荐**将您的预发布或生产配置包含在版本控制中!为了支持特定于系统的配置,您可能需要安装josegonzalez/php-dotenv
。
安装
安装和使用此包的最佳方式是通过composer
composer require northwoods/config
使用方法
此包有几种不同的使用方法。最简单的是使用静态工厂
use Northwoods\Config\ConfigFactory; $config = ConfigFactory::make([ 'directory' => __DIR__ . '/config', ]);
现在可以使用“点路径”读取配置
$token = $config->get('app.timezone');
这将加载config/app.php
并返回存在的timezone
键。
可选地,可以设置一个环境,这将添加一个额外的搜索路径
$config = ConfigFactory::make([ 'directory' => __DIR__ . '/config', 'environment' => 'dev', ]);
现在当请求app.timezone
时,将搜索config/dev/app.php
和config/app.php
中的timezone
键,并返回第一个结果。
最佳实践
**不推荐**将您的预发布或生产密钥添加到已提交到源控制的配置文件中。更好的解决方案是使用如josegonzalez/php-dotenv
或vlucas/phpdotenv
之类的env加载器。这将允许编写从getenv
读取的PHP配置文件。
return [ 'database' => [ 'password' => getenv('DATABASE_PASSWORD') ], ];
请参阅包文档了解如何从.env
文件中填充env值。
YAML文件
当安装了symfony/yaml
包时,支持YAML配置文件。
$config = ConfigFactory::make([ 'directory' => __DIR__ . '/config', 'environment' => 'dev', 'type' => 'yaml' ]);
注意:这假设所有配置文件都具有.yaml
扩展名!如果您希望结合PHP和YAML文件,请使用ConfigFactory
创建自定义的ConfigCollection
。
装饰器
还可以使用VariableDecorator
替换配置中的变量。这允许您在运行时定义变量而无需更改配置
use Northwoods\Config\Decorator\VariableDecorator; // Wrap any existing configuration with the decorator $config = new VariableDecorator($config); $config->setVariables(['%cacheDir%' => '/tmp']);
现在任何包含%cacheDir%
的配置值都将被替换为/tmp
return [ 'emails' => '%cacheDir%/emails', ];
装饰后将解析为/tmp/emails
ConfigInterface
所有配置容器都必须实现ConfigInterface
。
get()
使用get($path, $default)
方法访问配置值。
第一个参数是一个形式为file.key.extra
的“点路径”。支持无限深度。
第二个参数是在路径无法解析时将返回的默认值。如果没有提供默认值,则使用null
。
// If not defined, $timezone will be null $timezone = $config->get('app.timezone'); // If not defined, $timezone will be "UTC" $timezone = $config->get('app.timezone', 'UTC');
set()
也可以使用set($path, $value)
方法在运行时设置配置值。
第一个参数是形式为file.key.extra
的设置“点路径”。支持无限深度。
第二个参数是要设置的路径的值。
$config->set('app.timezone', 'Europe/Berlin');
类
以下类属于本包的组成部分
ConfigFactory
- 配置容器的工厂ConfigDirectory
- 读取单个目录的容器ConfigCollection
- 从容器集合中读取的容器Decorator\VariableDecorator
- 支持在配置值中替换变量的装饰器Loader\LoaderFactory
- 配置读取器的工厂Loader\PhpLoader
- 读取.php
配置文件的读取器Loader\YamlLoader
- 读取.yaml
配置文件的读取器
函数
获取和设置功能由 array_path
和 array_path_set
实现
use function Northwoods\Config\array_path; use function Northwoods\Config\array_path_set; $config = [ 'service' => [ 'uri' => 'http://api.example.com/' ], ]; // get a value from an array $uri = array_path($config, 'service.uri'); // set a value in an array $config = array_path_set($config, 'service.uri', 'https://api.example.com/v2/')
示例
更多示例请查看示例文件夹。
PHP 配置文件
PHP 配置文件示例
return [ 'timezone' => "America/New_York" ];
YAML 配置文件
YAML 配置文件示例
timezone: America/New_York
原始所有权
该库是从2017年7月开始从sinergi/config
分叉的,并发生了显著变化。感谢Gabriel Bull创建原始包!
许可证
Config遵循MIT许可证(MIT)。