zendframework / zend-pimple-config
1.1.1
2019-05-01 21:42 UTC
Requires
- php: ^7.1
- pimple/pimple: ^3.2.2
Requires (Dev)
- phpunit/phpunit: ^7.1.2
- zendframework/zend-coding-standard: ~1.0.0
- zendframework/zend-container-config-test: ^0.2 || ^1.0
This package is auto-updated.
Last update: 2020-01-20 20:11:31 UTC
README
仓库于2019-12-31废弃
此仓库已迁移至laminas/laminas-pimple-config。
此库提供工具,用于使用zend-servicemanager配置来配置一个兼容PSR-11的Pimple容器,以便在Expressive中使用。
安装
运行以下命令以安装此库
$ composer require zendframework/zend-pimple-config
配置
要获取配置好的PSR-11 Pimple容器,请按照以下步骤操作
<?php use Zend\Pimple\Config\Config; use Zend\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
:一个关联数组,将服务名称映射到委托工厂键的列表,有关更多详细信息,请参阅Expressive委托者文档。extensions
:一个关联数组,将服务名称映射到扩展工厂名称的列表,有关更多详细信息,请参阅下面的章节。shared
:一个关联数组,将服务名称映射到布尔值,以便告诉服务管理器是否应该缓存通过get方法创建的服务,独立于shared_by_default设置。shared_by_default
:一个布尔值,表示通过get方法创建的服务是否应该被缓存。默认值为true
。
请注意,整个配置都在config键的$container中可用
$config = $container->get('config');
extensions
仅当使用Pimple容器时,才可使用
extensions
配置。如果您正在使用Aura.Di或zend-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, // ... ], ], ], ]);
服务扩展的调用顺序与列表中定义的顺序相同。
与Expressive一起使用
将 config/container.php
的内容替换为以下内容
<?php use Zend\Pimple\Config\Config; use Zend\Pimple\Config\ContainerFactory; $config = require __DIR__ . '/config.php'; $factory = new ContainerFactory(); return $factory(new Config($config));