phly/phly-configfactory

从配置服务中提取嵌套配置数组的工厂

1.3.0 2024-04-17 13:58 UTC

This package is auto-updated.

Last update: 2024-09-17 14:58:43 UTC


README

Build Status Coverage Status

此库提供了一个可重用的工厂,用于从嵌套键中提取配置。

此库之前作为 phly/phly-expressive-configfactory 发布。此版本是一个分支,修改以支持 Laminas

安装

运行以下命令安装此库

$ composer require phly/phly-configfactory

使用

将工厂 Phly\ConfigFactory\ConfigFactory 分配给以下结构的命名服务

config-<dot.separated.config.keys>

例如,如果您有以下结构

return [
    'cache' => [
        'adapters' => [
            'blog' => [
                'connection' => 'tcp://localhost:6349',
                'username'   => 'www-data',
                'prefix'     => 'blog',
            ],
        ],
    ],
];

并且您想获取 "blog" 适配器配置,您将按以下方式分配依赖项

return [
    'dependencies' => [
        'factories' => [
            'config-cache.adapters.blog' => \Phly\ConfigFactory\ConfigFactory,
        ],
    ],
];

返回空或抛出异常

默认情况下,如果在预期键中找不到配置,则工厂返回一个空数组。如果您想让它抛出异常,可以将工厂分配如下

return [
    'dependencies' => [
        'factories' => [
            'config-cache.adapters.blog' => new \Phly\ConfigFactory\ConfigFactory(false),
        ],
    ],
];

此操作是安全的,因为 ConfigFactory 实现了 __set_state(),允许使用 var_export() 安全地序列化。

异常将指示它尝试检索的键层次结构。

在工厂中使用配置

在您的工厂中,您将引用元名称以检索服务。根据我们上面的例子

use Psr\Container\ContainerInterface;

class BlogCacheFactory
{
    public function __invoke(ContainerInterface $container)
    {
        return new Cache($container->get('config-cache.adapters.blog'));
    }
}

抽象工厂

如果您使用 laminas-servicemanager,您可以使用类 Phly\ConfigFactory\ConfigAbstractFactory 作为抽象工厂。这允许您省略为要检索的每个配置段添加工厂条目的操作。相反,您可以添加以下内容

return [
    'dependencies' => [
        'abstract_factories' => [
            \Phly\ConfigFactory\ConfigAbstractFactory::class,

            // OR

            new \Phly\ConfigFactory\ConfigAbstractFactory(false),
        ],
    ],
];

当存在时,它将处理任何以 config- 为前缀的服务,并以与 ConfigFactory 相同的方式操作。

注意事项

您应该仅指定将返回数组的键。大多数容器只允许从工厂返回数组或对象,否则将抛出异常。对于需要对象的情况,Mezzio 通常将其转换为 ArrayObject 实例,这使得这是安全的。

支持