formigone/php-config

此包最新版本(v0.0.1)没有可用的许可证信息。

v0.0.1 2016-10-08 00:00 UTC

This package is not auto-updated.

Last update: 2024-09-28 20:40:46 UTC


README

本项目是对 node-config 的松散移植。我只实现了足够的功能,以帮助我在现有项目中开始使用。

它做什么?

此包的目标是帮助您管理按环境分开的配置文件,但作为单个对象使用。

如何工作

假设您的应用程序存在于三个环境中:开发预发布生产。每个环境都有自己的唯一配置,但三者共享一些共同的配置。

作为一名有组织的开发者,您将在项目的某个位置创建一个名为 config 的目录,其中将存储以下文件

/project
  /config
     default.json
     development.json
     stage.json
     production.json

// config/default.json
{
  "appVersion": "1.0.0",
  "app": {
    "views": {
      "cache": false
    }
  }
}

// config/development.json
{
  "db": {
    "username": "root",
    "password": "",
    "host": "localhost"
  }
}

// config/default.json
{
  "db": {
    "username": "stage-user",
    "password": "stage-password",
    "host": "stage-db"
  }
}

// config/default.json
{
  "db": {
    "username": "secure-user",
    "password": "secure-password",
    "host": "super-cluster"
  },
  "app": {
    "views": {
      "cache": true
    }
  }
}

然后您将有一个针对您所在环境的单个配置对象,其中 default.json 和特定于环境的 .json 对象合并在一起,默认值被环境值覆盖(使用浅合并)。

$env = getenv('APP_ENV');
$configPath = __DIR__ . '/config';

$config = new Formigone\Config($env, $configPath);

$appVersion = $config->get('appVersion');
$db = $config->get('db');
$shouldCacheViews = $config->get('app.views.cache');

为什么要重新发明轮子?

因此,此项目本质上模仿了 ZF1的Zend_Config,它允许继承配置。为什么使用这个而不是?

  • 为什么使用JSON?
    • 这样配置就可以在PHP和JavaScript/Node.js之间共享。
  • 为什么不使用Zend_Config_Json?
    • 因为Zend_Config_Json只能解析单个文件。这在PHP中效果很好,但如果您使用Node.js中的某些东西(例如我恰好使用的node-config),则不能重用相同的配置文件。鉴于我的特定用例(我在重用配置并以node-config开始),这很有意义,因此我需要这个包。