phoole/config

一个轻量级的PHP配置加载库。

1.1.0 2019-11-19 07:06 UTC

This package is auto-updated.

Last update: 2024-09-19 17:31:23 UTC


README

Build Status Scrutinizer Code Quality Code Climate PHP 7 Latest Stable Version License

一个轻量级的PHP配置加载库。它加载PHP、JSON、YAML配置文件,易于使用,但功能强大。它需要PHP 7.2+,并且符合 PSR-1PSR-4PSR-12

安装

通过 composer 工具安装。

composer require "phoole/config=1.*"

或者将以下行添加到您的 composer.json

{
    "require": {
       "phoole/config": "1.*"
    }
}

特性

  • 简单的接口,get($id)has($id)with($id, $value)

  • 一个中心位置,方便管理所有配置文件。

    config/
     |
     |___ production/
     |       |
     |       |___ host1/
     |       |      |___ db.php
     |       |      |___ redis.php
     |       |
     |       |___ db.php
     |
     |___ dev/
     |     |
     |     |___ redis.php
     |     |___ db.php
     |
     |___ db.php
     |___ redis.php
     |___ system.php
    
  • 可以使用 环境 值,例如 productionproduction/host1 在不同配置之间切换。

  • 配置值中的 引用 完全支持,例如 ${system.tmpdir}

  • 使用 $config->get('ENV.USER')${ENV.USER} 获取环境值

  • 使用点表示法 dot notation 的层次配置结构,如 db.auth.host

  • 支持 .php.json.yml(需要安装yaml扩展) 类型的配置文件。

用法

  • 使用环境值

    通常应用程序在不同的服务器上运行的环境不同。一个良好的做法是在主机的某个位置设置环境,并将所有配置文件放在一个中心的 config/ 目录中。

    一个示例 .env 文件,

    # installation base
    BASE_DIR=/www
    
    # app directory
    APP_DIR=${BASE_DIR}/app
    
    # config directory
    CONFIG_DIR=${APP_DIR}/config
    
    # app env for current host
    APP_ENV=production/host1

    在一个示例 bootstrap.php 文件中,

    use Phoole\Config\Config;
    use Phoole\Env\Environment;
    
    // load server environment from '.env' file
    (new Environment())->load(__DIR__ . '/.env');
    
    // create config instance with the config file loader
    $config = new Config(getenv('CONFIG_DIR'), getenv('APP_ENV'));
    
    // object access of $config
    $db_config = $config->get('db');
  • 中心配置目录和配置分组

    • 配置分组

      配置收集到一个目录中,并按文件和子目录分组,以便于管理。

      例如,config/system.php 包含 system.* 配置

      // system.php
      return [
          'tmpdir' => '/usr/local/tmp',
          // ...
      ];

      稍后,可以使用以下方式检索与 system 相关的配置

      $dir = $config->get('system.tmpdir');

      或者在其他配置中作为 引用 使用。

    • 配置文件加载顺序

      如果环境设置为 production/host1,配置文件的加载顺序是(假设配置文件是 *.php),

      1. config/config/*.php

      2. config/production/*.php

      3. config/production/host1/*.php

      配置值将被覆盖,并替换那些后来加载的文件中的值。

  • 引用的使用

    引用使您的配置易于管理。

    例如,在 system.php

    return [
        'tmpdir' => '/var/local/tmp',
        ...
    ];

    在您的 cache.php 文件中,

    return [
        // a local filesystem cache driver
        'local' => [
            'driver' => 'filesystem',
            'params' => [
                'root_dir'   => '${system.tmpdir}/cache', // use reference here
                'hash_level' => 2
            ]
        ],
        ...
    ];

    您可以重新设置引用的开始和结束匹配模式如下,

    // now reference is something like '%{system.tmpdir}%'
    $config->setReferencePattern('%{', '}%');
  • 访问环境值

    环境值可以通过特殊节点 'ENV' 访问。例如。

    $tmpdir = $config->get('ENV.APP_TMPDIR');

    或者以引用格式,

    return [
        'tmpdir' => '${ENV.APP_TMPDIR}'
    ];
  • 点表示法

    使用点表示法 db.auth.host 的层次配置结构。

    // returns the db config array
    $db_config = $config->get('db');
    
    // returns a string
    $db_host = $config->get('db.auth.host');

    支持扁平表示法和数组表示法,并且可以同时存在。

    // db config file
    return [
        // array notation
        'auth' => [
            'host' => 'localhost',
            'port' => 3306
        ],
    
        // flat notation
        'auth.user' => 'dbuser'
    ];
  • 在初始加载后,$config 是不可变的。如果您想添加新的配置值,您可以使用,

    $newconf = $config->with('redis', ['host' => 'localhost']);

    其中 $newconf 是一个新配置对象。

APIs

  • ConfigInterface API

    • get(string $id): mixed

      返回值可能是一个 stringarray 或甚至 object。如果未找到,则返回 null

    • has(string $id): bool

      测试 $id 是否存在。返回一个 boolean 值。

    • with(string $id, mixed $value): Config

      返回一个新的配置对象,其中 $id 已设置。

  • ReferenceInterface API

    • setReferencePattern(string $start, string $end): $this

      重置引用的开始和结束字符。默认为 '${'}'

测试

$ composer test

依赖

  • PHP >= 7.2.0

许可