charcoal / config
Charcoal 配置数据和对象建模组件
Requires
- php: ^7.4 || ^8.0
- ext-json: *
- ext-spl: *
- psr/container: ^1.0
Requires (Dev)
- php-coveralls/php-coveralls: ^2.2
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.5
- symfony/yaml: ^3.0
Suggests
- symfony/yaml: To load and parse configuration files in yaml format.
Replaces
This package is auto-updated.
Last update: 2024-09-13 16:16:21 UTC
README
Config 包提供了组织配置数据和设计对象数据模型的抽象工具。
安装
composer require charcoal/config
概述
实体 & 配置
Config 组件简化了对对象数据的访问。它提供了一个基于属性的用户界面,用于在应用程序代码中检索和存储任意数据。数据被组织成两种主要对象类型:实体和配置。
实体
实体代表简单的数据对象容器,设计为灵活的领域模型对象的基础。
示例:存储库的单个结果或作为 MVC 系统每个组件的基础。
- 类:
Charcoal\Config\AbstractEntity
- 方法:
keys
,data
,setData
,has
,get
,set
- 接口:
Charcoal\Config\EntityInterface
ArrayAccess
JsonSerializable
Serializable
配置
配置是高级实体,专为运行时配置值设计,支持加载文件和存储分层数据。
示例:应用程序首选项、服务选项和工厂设置。
- 类:
Charcoal\Config\AbstractConfig
IteratorAggregate
Psr\Container\ContainerInterface
- 方法:
defaults
,merge
,addFile
- 接口:
Charcoal\Config\ConfigInterface
Charcoal\Config\EntityInterface
Charcoal\Config\FileAwareInterface
Charcoal\Config\SeparatorAwareInterface
Charcoal\Config\DelegatesAwareInterface
特性
文件加载器
Config 容器目前支持四种文件格式:INI、JSON、PHP 和 YAML。
可以通过 addFile($path)
方法或将文件直接实例化将配置文件导入到 Config 对象中。
use Charcoal\Config\GenericConfig as Config; $cfg = new Config('config.json'); $cfg->addFile('config.yml');
文件扩展名将用于确定如何导入文件。文件将被解析,如果它是一个数组,它将被合并到容器中。
如果您想加载配置文件而不将其内容添加到 Config 中,请使用 loadFile($path)
代替。无论它是一个数组还是其他,文件都将被解析并返回。
$data = $cfg->loadFile('config.php');
键分隔符查找
可以使用键分隔符在多维数组中查找、检索、分配或合并值。
在 Config 对象中,默认分隔符是点字符(.
)。可以通过 separator()
方法检索令牌,并使用 setSeparator()
方法自定义。
use Charcoal\Config\GenericConfig as Config; $cfg = new Config(); $cfg->setSeparator('/'); $cfg->setData([ 'database' => [ 'params' => [ 'name' => 'mydb', 'user' => 'myname', 'pass' => 'secret', ] ] ]); echo $cfg['database/params/name']; // "mydb"
请参阅文档以获取更多信息。
委托查找
委托允许多个对象共享值,并在当前对象无法解析给定的数据键时充当后备。
在配置对象中,委托对象被注册到内部堆栈中。如果一个数据键无法解析,配置对象会遍历堆栈中的每个委托对象,并在第一个包含非NULL
值的匹配项处停止。
use Charcoal\Config\GenericConfig as Config; $cfg = new Config([ 'driver' => null, 'host' => 'localhost', ]); $delegate = new Config([ 'driver' => 'pdo_mysql', 'host' => 'example.com', 'port' => 11211, ]); $cfg->addDelegate($delegate); echo $cfg['driver']; // "pdo_mysql" echo $cfg['host']; // "localhost" echo $cfg['port']; // 11211
有关更多信息,请参阅文档。
数组访问
实体对象实现了ArrayAccess
接口,因此可以使用数组风格使用。
$cfg = new \Charcoal\Config\GenericConfig(); // Assigns a value to "foobar" $cfg['foobar'] = 42; // Returns 42 echo $cfg['foobar']; // Returns TRUE isset($cfg['foobar']); // Returns FALSE isset($cfg['xyzzy']); // Invalidates the "foobar" key unset($cfg['foobar']);
👉 数据键必须是一个字符串,否则会抛出
InvalidArgumentException
异常。
互操作性
配置对象实现了PSR-11: Psr\Container\ContainerInterface
。
此接口公开了两个方法:get()
和has()
。这些方法由实体对象作为ArrayAccess::offsetGet()
和ArrayAccess::offsetExists()
的别名实现。
$config = new \Charcoal\Config\GenericConfig([ 'foobar' => 42 ]); // Returns 42 $config->get('foobar'); // Returns TRUE $config->has('foobar'); // Returns FALSE $config->has('xyzzy');
👉 使用不存在键调用
get()
方法不会抛出异常。
可配置对象
本包还提供了一种可配置混入(mixin)。
Charcoal\Config\ConfigrableInterface
Charcoal\Config\ConfigurableTrait
可配置对象(可能被称为“配置感知”)可以关联一个配置对象,这有助于定义各种属性、状态或其他。
可以通过setConfig()
分配配置对象,通过config()
检索。
ConfigurableTrait
的一个额外好处是createConfig($data)
方法,该方法用于在没有分配的情况下创建一个配置对象。此方法可以在子类中重写,以自定义返回的实例和可能需要的初始状态。
有关示例和更多信息,请参阅文档。
资源
- 贡献
- 报告问题和发送拉取请求,请访问主Charcoal仓库。