samsonos/php_config

SamsonPHP 配置系统

1.0.8 2015-01-12 14:20 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:05:59 UTC


README

基于面向对象的配置系统。这种方法使用 PHP 面向对象的全部能力来创建基于类的配置。

Latest Stable Version Build Status Code Coverage Code Climate Total Downloads Scrutinizer Code Quality Stories in Ready

配置方案

您的项目可以有任意数量的可能配置,这通常用于不同的环境,例如 开发、测试、部署、生产 阶段,为此目的,我们创建了 samsonos\config\Scheme,每个都对应于特定环境。在实际应用中,您应该有一个 基本配置文件夹,默认位于 app/config 文件夹。

全局配置

在您的 app/config 文件夹的根目录下,您应该创建默认的 实体配置类。如果没有指定当前配置环境,将自动使用这些实体配置类。

重要!如果您已指定某些配置环境(例如 production),但其中没有某些模块/对象的实体配置类 - 如果存在,将使用全局配置实体来替代。

创建配置环境

要创建新的配置环境,您需要在 基本配置文件夹(默认位于 app/config)中创建新文件夹,例如,我们想创建 production 环境,新文件夹路径将是: app/config/production/。并且那里的所有实体配置类都将对应于您的 production 配置方案,这将自动创建。

实体配置

要配置您的项目模块\对象,您应该使用类,为了正确地在其他类中找到这些类,我们要求您扩展我们的基本实体配置类 samsonos\config\Entity

namespace project;

class entityIDConfig extends samsonos\config\Entity
{    
}

您的实体配置类名称应遵循以下逻辑: [EntityIdentifier]Config

  • EntityIdentifier - 配置的模块/对象标识符
  • 所有实体配置类的名称必须以 Config 结尾

您的实体配置类命名空间应遵循以下逻辑

  • 每个类都必须定义任何命名空间(默认为您的项目名称)
  • 全局实体配置类(位于 基本配置文件夹),应具有以下列表项中定义的命名空间。
  • 其他环境的实体配置类(位于 其他内部文件夹),应具有命名空间: [ParentNamespace]\[EnvironmentName],如果我们扩展先前的实体配置示例,但现在为 production 环境
namespace project\production;

class entityIDConfig extends samsonos\config\Entity
{
    public $parameter = 'value';
}

重要!由于我们使用 PSR-* 标准 - 类名必须与文件名匹配

可能的配置参数

面向对象配置方法的主要优点是您可以指定任何可能的 PHP 值作为预定义类字段值,主要限制是它们必须是 public 可访问的

namespace project;

class entityIDConfig extends samsonos\config\Entity
{    
    public $stringParameter = 'I am a string';
    public $integerParameter = 1123;
    public $arrayParameter = array('1', 123);
}

禁止的操作

不幸的是,您不能在类字段值中预定义计算和字符串连接(以及其他操作),但您可以在 __construct 方法中始终执行它。当 配置方案 创建时,为每个环境创建所有 实体配置 实例 - 因此执行它们的 __construct 方法,在那里您可以进行任何可能的操作。

namespace project;

class entityIDConfig extends samsonos\config\Entity
{    
    public $stringParameter = 'I am a string';
    public $integerParameter = 1123;
    public $arrayParameter = array('1', 123);
    public $complicatedParameter;
    
    public function __construct()
    {
        // Fill your parameter with what you want
        $this->complicatedParameter = $this->stringParameter . dirname(__DIR__); 
    }
}

扩展现有配置

还可以扩展父实体配置,如果我们只想对某些实体配置进行一些小的更改,我们只需扩展它即可

// Mention - class name is the same, only namespace is different
namespace project\other;

// We are extending global configuration from previous example
class entityIDConfig extends project\entityIDConfig
{
  // We overload only this parameter, as we want all to be the same as parent
  public $integerParameter = 2222;
}

配置管理器

所有项目模块/对象的配置都通过配置管理器 samsonos\config\Manager 处理,你必须创建其实例,你必须指定只有一个参数 基本配置文件夹路径,初始化管理器时应该使用 init() 方法,这些方法特别分开以提供按需加载实体配置类的能力。

$manager = new \samsonos\config\Manager('.../path/to/base/folder');
$manager->init();

加载实体配置类

我们为加载实体配置创建了专门的静态方法 samsonos\config\Manager::import($path),此方法在创建或加载配置方案时内部使用,对于这些任务你应该使用 init(path)

$manager = new \samsonos\config\Manager();
$manager->init('.../path/to/base/folder');

切换配置

如果你想更改当前活动的管理器配置,应该使用 change($identifier) 方法。

  • $identifier - 环境标识符(配置方案标识符)

从不同位置加载方案

如果你有带有不同配置的单独基本配置文件夹,例如一个项目在另一个项目内部,内部项目想从父对象获取一些配置,你可以从其他位置加载配置。

$manager = new \samsonos\config\Manager();
$manager->init('.../path/to/base/folder');
$manager->init('.../path/to/OTHER/folder');

重要!不同位置的同一环境的实体配置会被覆盖。

事件系统

此模块只有一个外部依赖 - 事件系统,并且与外部世界的所有互操作性都必须使用此方法。目前该模块不触发任何事件,但有 2 个订阅

  • core.environment.change - 当外部环境正在更改时
  • core.module.configure - 当某个对象正在配置时