vshf / php-config
处理应用设置的PHP配置系统
Requires
- php: >=7.2.0
Requires (Dev)
- mockery/mockery: 1.5.1
- phpunit/phpunit: 9.6.7
This package is not auto-updated.
Last update: 2024-10-02 23:32:47 UTC
README
VSHF PHP配置管理器是PHP应用的设置/配置管理器。它提供处理设置和具有其属性的资源的功能。
用法
要使用VSHF配置管理器,您需要实例化Config
类
$settings = new \VSHF\Config\Config();
您还可以使用设置初始化它
$settings = new \VSHF\Config\Config([ 'setting1' =>'value1', 'setting2' =>'value2' ]);
上下文
默认设置上下文是app上下文。在初始化时添加设置。
您可以在稍后填充不同的上下文
$settings->hydrate( [ 'settingA' =>'valueA', 'settingB' =>'valueB' ], 'myContext' );
这将创建一个以下结构的内部设置树
[
'app' => [
'setting1' =>'value1',
'setting2' =>'value2'
],
'myContext' =>[
'settingA' =>'valueA',
'settingB' =>'valueB'
]
]
资源和属性
在具有资源集合及其属性的情况下,属性可以被认为是每个资源的设置,您可以使用配置管理器来处理它们。
例如,如果您有一个包含服务和isPriced属性的集合,您可以观察不同服务中此属性的值。
[
'service_1' => [
'isPriced' => FALSE,
...
],
'service_2' => [
'isPriced' => TRUE,
...
],
...
]
使用资源集合进行填充
foreach ($collection as $itemId => $item) { $settings->hydrateResource( [ 'isPriced' => TRUE, // other properties ], 'services', // Context $itemId // Resource ID ); }
观察者
每个设置都必须有相应的观察者,该观察者实现了ObserverInterface
。观察者可以处理一个或多个设置。
注册观察者
// In the main context: $settings->registerObserver('settingId', MyObserver::class); // In a custom context $settings->registerObserver('settingId', MyObserver::class, 'myContext'); // Observing multiple settings with a single observer: $settings->registerObserver('settingA', MyObserver::class); $settings->registerObserver('settingB', MyObserver::class);
资源属性观察者
同样,每个资源属性都必须有相应的属性观察者,该观察者实现了PropertyObserverInterface
。观察者可以处理一个或多个属性。
注册属性观察者
$settings->registerObserver('propertyId', MyPropertyObserver::class, 'services'); // Observing multiple properties with a single observer: $settings->registerObserver('propertyA', MyPropertyObserver::class, 'services'); $settings->registerObserver('propertyB', MyPropertyObserver::class, 'services');
获取和保存
获取设置
// From the main context: $settings->get('settingA'); // From a custom context: $settings->get('settingA', 'myContext');
保存设置
// In the main context: $settings->save('settingA', 'newValue'); // In a custom context: $settings->save('settingA', 'newValue', 'myContext');
资源属性
检索给定资源的属性
$settings->getProperty('propertyA', 'services', 'resourceId');
保存给定资源的属性
$settings->saveProperty('propertyA', 'services', 'resourceId');
检索具有所有属性的给定资源
$settings->getResourceProperties('services', 'resourceId');
设置依赖
设置或资源属性可以依赖于一个或多个其他设置,甚至来自不同的上下文。
要设置依赖,观察者的dependencies()
方法必须返回一个Dependency对象。
// Inside settingA's observer class public static function dependencies(){ $dependency = new \VSHF\Config\Dependency(); $dependency ->on('settingB') ->beingEqualTo('certainValue') ; return $dependency; }
在此示例中,如果settingB等于certainValue,则正确返回settingA。否则,返回NULL。
需要注意的是,NULL不应该是一个默认/适当的设置值。
复杂依赖
依赖可以是复杂的,涉及逻辑运算符如AND和OR。您可以使用Dependency对象构建复杂的依赖。
$dependency = new \VSHF\Config\Dependency(); // AND $dependency ->on('settingB') ->beingEqualTo('certainValue') ->and('settingC') ->beingTruthy() ; // OR $dependency ->on('settingB') ->beingEqualTo('certainValue') ->or('settingC') ->beingTruthy() ; //INVALID, triggers an error $dependency ->on('settingB') ->beingEqualTo('certainValue') ->and('settingC') ->beingTruthy() ->or('settingD') ->beingFalsy() ; /* * This is equal to: * settingB === certainValue && ( * settingC || !settingD * ) */ $dependency ->on('settingB') ->beingEqualTo('certainValue') ->andGroup() ->on('settingC') ->beingTruthy() ->or('settingD') ->beingFalsy() ->endGroup() ; /* * This is equal to: * settingB === certainValue || ( * settingC && !settingD * ) */ $dependency ->on('settingB') ->beingEqualTo('certainValue') ->orGroup() ->on('settingC') ->beingTruthy() ->and('settingD') ->beingFalsy() ->endGroup() ;
许可
本项目是开源软件,根据MIT许可授权。