northwoods/config

简单的配置加载器

2.0.0 2018-02-01 15:32 UTC

This package is auto-updated.

Last update: 2024-09-11 14:46:46 UTC


README

Build Status StyleCI Scrutinizer Code Quality Code Coverage Latest Stable Version Total Downloads License SensioLabsInsight

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.phpconfig/app.php中的timezone键,并返回第一个结果。

最佳实践

**不推荐**将您的预发布或生产密钥添加到已提交到源控制的配置文件中。更好的解决方案是使用如josegonzalez/php-dotenvvlucas/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_patharray_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)。