laminas / laminas-pimple-config
PSR-11 Pimple 容器配置器,用于 Laminas 和 Mezzio 应用程序
Requires
- php: ~8.0.0 || ~8.1.0 || ~8.2.0
- pimple/pimple: ^3.5.0
Requires (Dev)
- laminas/laminas-coding-standard: ~2.4.0
- laminas/laminas-container-config-test: ^0.8
- phpunit/phpunit: ^9.5.26
- psalm/plugin-phpunit: ^0.18.3
- vimeo/psalm: ^5.0
Conflicts
This package is auto-updated.
Last update: 2023-12-05 12:25:22 UTC
README
弃用
此包已被弃用且将不再进行进一步开发!
请参阅技术指导委员会会议纪要
🇷🇺 俄罗斯公民
我们,Laminas 的参与者,来自不同的国家。我们中许多人有在俄罗斯和乌克兰的朋友、亲属和同事。我们中的一些人出生在俄罗斯。我们中的一些人现在住在俄罗斯。我们中的一些人的祖父母在二战中与法西斯作战。这里没有人支持法西斯主义。
我们中有一个乌克兰亲属,她和儿子一起逃离了家园。由于前方道路上的轰炸,火车延误了。我们有一些朋友在防空洞里躲避。我们在空袭后焦急地关注他们的消息,空袭无差别地攻击医院、学校、幼儿园和房屋。我们不是从任何媒体上得知这些,我们直接目睹了这一切。
您足够信任我们使用我们的程序,我们请求您再次信任我们。我们需要您的帮助。走出家门,抗议这场毫无意义的战争。停止杀戮。说“不,战争!”
🇺🇸 致俄罗斯公民
我们来自世界各地的 Laminas 团队。我们中许多人有在俄罗斯和乌克兰的朋友、家人和同事。我们中的一些人出生在俄罗斯。我们中的一些人现在住在俄罗斯。我们中的一些人的祖父母在二战中与纳粹作战。这里没有人支持法西斯主义。
团队成员中有一个乌克兰亲属,她和儿子一起逃离了家园。由于前方道路上的轰炸,火车延误了。我们有一些朋友在防空洞里躲避。我们在空袭后焦急地关注他们的消息,空袭无差别地攻击医院、学校、幼儿园和房屋。我们不是从任何媒体上得知这些,我们直接目睹了这一切。
您足够信任我们使用我们的软件。我们请求您信任我们说出真相。我们需要您的帮助。走出家门,抗议这场毫无意义的战争。停止杀戮。说“停止战争!”
此库提供了配置PSR-11兼容的Pimple 容器的实用工具,用于Mezzio应用程序。
安装
运行以下命令来安装此库
$ composer require laminas/laminas-pimple-config
配置
要获取配置好的PSR-11 Pimple 容器,请执行以下操作
<?php use Laminas\Pimple\Config\Config; use Laminas\Pimple\Config\ContainerFactory; $factory = new ContainerFactory(); $container = $factory( new Config([ 'dependencies' => [ 'services' => [], 'invokables' => [], 'factories' => [], 'aliases' => [], 'delegators' => [], 'extensions' => [], 'shared' => [], 'shared_by_default' => true, ], // ... other configuration ]) );
子关联数组 dependencies
可以包含以下键
services
:一个关联数组,将键映射到特定的服务实例。invokables
:一个关联数组,将键映射到无参构造函数的服务;即对于不需要构造函数参数的服务。键和服务名称通常相同;如果它们不同,则键被视为别名。factories
:一个关联数组,将服务名称映射到工厂类名称,或任何可调用对象。工厂类必须无参可实例化,并且一旦实例化即可调用(即实现__invoke()
方法)。aliases
:一个关联数组,将别名映射到服务名称(或另一个别名)。delegators
:一个关联数组,将服务名称映射到委托工厂键的列表,有关详细信息,请参阅Mezzio 委托者文档。extensions
:一个关联数组,将服务名称映射到扩展工厂名称的列表,有关详细信息,请参阅下文部分。shared
:一个关联数组,将服务名称映射到布尔值,以指示服务管理器是否应该缓存通过get方法创建的服务,独立于shared_by_default设置。shared_by_default
:一个布尔值,指示通过get
方法创建的服务是否应该被缓存。默认值为true
。
请注意,整个配置都可在
config
键的$container
中找到。$config = $container->get('config');
extensions
extensions
配置仅在Pimple容器中使用。如果您使用Aura.Di或laminas-servicemanager,则可以使用delegators
代替。如果您希望保持最高的兼容性并可能考虑将来更改所使用的容器库,则建议使用delegators
。
扩展工厂具有以下签名
use Psr\Container\ContainerInterface; public function __invoke( $service, ContainerInterface $container, $name );
传递给扩展工厂的参数如下
$service
是实际的服务实例。$container
是用于为请求的服务创建扩展时使用的容器。$name
是请求的服务名称。
以下是一个扩展工厂的示例
use Psr\Container\ContainerInterface; class ExtensionFactory { public function __invoke($service, ContainerInterface $container, $name) { // do something with $service return $service; } }
您还可以从扩展工厂返回不同的实例
use Psr\Container\ContainerInterface; class ExtensionFactory { public function __invoke($service, ContainerInterface $container, $name) { return new Decorator($service); } }
请注意,在配置扩展时,必须为服务提供一个列表的扩展工厂,而不是单个扩展工厂名称
new Config([ 'dependencies' => [ 'invokables' => [ 'my-service' => MyInvokable\Service::class, ], 'extensions' => [ 'my-service' => [ Extension1Factory::class, Extension2Factory::class, // ... ], ], ], ]);
服务扩展的调用顺序与列表中定义的顺序相同。
与Mezzio一起使用
将config/container.php
的内容替换为以下内容
<?php use Laminas\Pimple\Config\Config; use Laminas\Pimple\Config\ContainerFactory; $config = require __DIR__ . '/config.php'; $factory = new ContainerFactory(); return $factory(new Config($config));