samsonphp / config
SamsonPHP 配置系统
Requires
- samsonphp/event: 1.*
Requires (Dev)
- phpunit/phpunit: 4.*
README
基于面向对象(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
- 当某些对象被配置时