phly / zend-servicemanager-interop
为 zend-servicemanager 提供 service-provider 编译功能
dev-master / 1.0.x-dev
2016-04-19 17:56 UTC
Requires
- php: ^5.6 || ^7.0
- container-interop/container-interop: ^1.1
- container-interop/service-provider: ^0.2
- zendframework/zend-servicemanager: ^3.0
Requires (Dev)
- phpunit/phpunit: ^4.8
- squizlabs/php_codesniffer: ^2.3
This package is auto-updated.
Last update: 2024-09-11 14:16:51 UTC
README
使用 container-interop service providers 与 zend-servicemanager 结合。
安装
$ composer require phly/zend-servicemanager-interop
用法
use Zend\ServiceManager\Interop\ConfigInjector; use Zend\ServiceManager\Interop\ProviderAggregate; use Zend\ServiceManager\ServiceManager; // Get a list of service provider classes and aggregate them: $aggregate = new ProviderAggregate(); foreach (include 'providers.php' as $provider) { $aggregate->enqueue($provider); } // Create and inject a service manager with the providers: $container = (new ConfigInjector())->inject($aggregate, new ServiceManager());
内部机制
ProviderAggregate
允许传递一个提供者的类名或实例。内部上,它从类名创建实例以确保从队列中取出的项目是已知的好类型。ConfigInjector
将创建一个围绕工厂的闭包,以便 curry 参数并确保工厂与 zend-servicemanager 调用它们的方式没有冲突。ConfigInjector
如果服务已经存在于 zend-servicemanager 实例中,则将工厂添加为代理。同样,工厂被包裹在一个闭包中以正确顺序 curry 参数。
与 service-provider 的不同之处
此实现进行了一些实验,并允许以下作为工厂参数
- 任何有效的 PHP 可调用者
- 解析为函数对象的 FQCN 参数