samsonphp/config

SamsonPHP 配置系统

1.0.11 2015-01-13 17:07 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:13:39 UTC


README

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

基于面向对象(OOP)的配置系统。此方法利用PHP面向对象的所有能力,根据类创建配置。

配置方案

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

全局配置

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

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

创建配置环境

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

实体配置

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

namespace project;

class entityIDConfig extends samsonphp\config\Entity
{    
}

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

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

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

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

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

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

可能的配置参数

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

namespace project;

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

禁止的操作

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

namespace project;

class entityIDConfig extends samsonphp\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;
}

配置管理器

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

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

加载实体配置类

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

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

切换配置

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

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

从不同位置加载方案

如果您有具有不同配置的独立基础配置文件夹,例如一个项目在另一个项目中,内部项目希望从父对象获取一些配置,您可以从其他位置加载配置

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

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

事件系统

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

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