phly / phly-configfactory
从配置服务中提取嵌套配置数组的工厂
1.3.0
2024-04-17 13:58 UTC
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- psr/container: ^1.0 || ^2.0
Requires (Dev)
- laminas/laminas-coding-standard: ~2.3.0
- laminas/laminas-servicemanager: ^3.4
- phpunit/phpunit: ^9.6
Suggests
- laminas/laminas-servicemanager: Install laminas-servicemanager to use the ConfigAbstractFactory
README
此库提供了一个可重用的工厂,用于从嵌套键中提取配置。
此库之前作为 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
实例,这使得这是安全的。