rstgroup/zf-external-config-module

负责从外部源获取配置的模块。

1.0 2017-07-26 09:41 UTC

This package is not auto-updated.

Last update: 2024-09-15 02:18:04 UTC


README

此模块提供从外部源加载和合并应用程序配置的逻辑和抽象。

该模块本身还没有任何外部提供者,提供者可以通过Composer安装或在您的应用程序代码中编写。

安装

使用Composer要求模块

composer require rstgroup/zf-external-config-module

下一步是将模块添加到ZF系统配置(config/application.config.php)

return [
    'modules' => [
        (...),
        'RstGroup\ZfExternalConfigModule',
    ],
    (...)
]

添加提供者

要从外部源加载配置,应将提供者注册到您的应用程序配置中

return [
    'rst_group' => [
        'external_config' => [
            'providers' => [
                'YourProviderService' => true,
            ],
            'service_manager' => [
                'factories' => [
                    'YourProviderService' => YourProvidersServiceFactory::class
                ]
            ]
        ],
    ]
];

模块遍历在

rst_group.external_config.providers

中定义的启用提供者,并使用内部服务管理器创建它们。

启用和禁用提供者

即使已定义,禁用的提供者也不参与最终配置的创建。

以下是如何标记定义的提供者启用或禁用的示例

return [
    'rst_group' => [
        'external_config' => [
            'providers' => [
                
                'EnabledProvider#1' => true,
                'EnabledProvider#2' => 'true',
                'EnabledProvider#3' => 'on',
                'EnabledProvider#4' => 1,
                
                'DisabledProvider#1' => false,
                'DisabledProvider#2' => 'false',
                'DisabledProvider#3' => 'off',
                'DisabledProvider#4' => 0,
                
            ],
        ],
    ],
];

内部服务管理器

在上面的示例中,您可以查看service_manager定义。

该模块附加到配置合并过程,因此应用程序的默认ServiceManager尚不可用。为了保持服务管理器的功能,zf-external-config-module创建自己的管理器!

您可以通过工厂创建服务,可以声明可调用等 - 与您通常声明服务的方式相同。

但请记住,此服务在加载和合并外部配置后结束其生命周期!

将配置传递给您的提供者

当定义您自己的提供者时,您可能需要将一些凭据或其他参数传递到提供者实例。为此 - 最好的方式是使用工厂功能,因为工厂具有(内部)服务管理器的注入!

内部服务管理器已将应用程序配置和zf-external-config-module的配置注册为服务

use Psr\Container\ContainerInterface;
use \RstGroup\ZfExternalConfigModule\Config\ExternalConfigListener;

final class ExampleServiceFactory {
    public function __invoke(ContainerInterface $container) {
        /* getting app's configuration */
        $appConfig = $container->get(
            ExternalConfigListener::SERVICE_APPLICATION_CONFIG
        );
        
        /* getting zf-external-config-module configuration */
        $moduleConfig = $container->get(
            ExternalConfigListener::SERVICE_EXTERNALS_CONFIG
        );
        
        (...)
    }
}

请注意,已从应用程序配置中删除rst_group.external_config密钥,但您仍然可以使用模块的配置获取它。

编写您自己的提供者

外部配置提供者必须实现\RstGroup\ZfExternalConfigModule\Config\ConfigProviderInterface并在模块和内部服务管理器中注册。这是唯一的要求!

您可以将代码存储在您自己的应用程序代码库中,但我们建议将其与社区共享并在GitHub & Composer上发布。我们将乐意将您的提供者添加到此包的suggest提供者中!

建议的提供者

Consul KV存储:rstgroup/zf-external-config-consul-provider