dflydev/dot-access-configuration

给定一个表示配置的深层数据结构,通过点表示法访问配置。

v2.0.0 2023-01-06 20:47 UTC

This package is auto-updated.

Last update: 2024-09-07 00:42:46 UTC


README

给定一个表示配置的深层数据结构,通过点表示法访问配置。

此库结合了 dflydev/dot-access-datadflydev/placeholder-resolver,以提供完整的配置解决方案。

要求

用法

通常,人们会使用 ConfigurationBuilderInterface 的实现来构建 ConfigurationInterface 实例。例如,要从 YAML 文件构建配置,就会使用 YamlFileConfigurationBuilder

use Dflydev\DotAccessConfiguration\YamlFileConfigurationBuilder;

$configurationBuilder = new YamlFileConfigurationBuilder('config/config.yml');
$configuration = $configurationBuilder->build();

一旦创建,配置实例的行为类似于来自 dflydev/dot-access-data 的数据实例。

$configuration->set('a.b.c', 'ABC');
$configuration->get('a.b.c');
$configuration->set('a.b.e', array('A', 'B', 'C'));
$configuration->append('a.b.e', 'D');

自定义配置

配置构建器在幕后使用配置工厂和占位符解析器工厂来构建可用的配置。

在正常情况下,通常不需要对占位符解析器工厂进行任何操作。然而,可能希望扩展默认的 Configuration 类或使用完全不同的实现。

为了使用标准构建器构建自定义 ConfigurationInterface 实现的实例,需要实现 ConfigurationFactoryInterface 并将其注入任何 ConfigurationBuilderInterface

如果配置声明如下

namespace MyProject;

use Dflydev\DotAccessConfiguration\Configuration;

class MyConf extends Configuration
{
    public function someSpecialMethod()
    {
        // Whatever you want here.
    }
}

创建以下工厂

namespace MyProject;

use Dflydev\DotAccessConfiguration\ConfigurationFactoryInterface;

class MyConfFactory implements ConfigurationFactoryInterface
{
    /**
     * {@inheritdocs}
     */
    public function create()
    {
        return new MyConf;
    }
}

要使用任何构建器与工厂一起使用,请按以下方式注入

use Dflydev\DotAccessConfiguration\YamlFileConfigurationBuilder;
use MyProject\MyConfFactory;

$configurationBuilder = new YamlFileConfigurationBuilder('config/config.yml');

// Inject your custom Configuration Factory
$configurationBuilder->setConfigurationFactory(new MyConfFactory);

// Will now build instances of MyConfFactory instead of
// the standard Configuration implementation.
$configuration = $configurationBuilder->build();

许可证

此库受新BSD许可证的许可 - 有关详细信息,请参阅LICENSE文件。

社区

如果您有疑问或想提供帮助,请加入irc.freenode.net上的#dflydev频道。