phly / zend-servicemanager-interop
Providing service-provider compilation for zend-servicemanager
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-11-11 14:40:17 UTC
README
Use container-interop service providers with zend-servicemanager.
Installation
$ composer require phly/zend-servicemanager-interop
Usage
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());
Internals
ProviderAggregate
allows passing either a class name of a provider, or an instance. Internally, it creates instances from class names to ensure that dequeued items are known-good types.ConfigInjector
will create a closure around factories, to curry arguments and ensure the factories have no conflicts with how zend-servicemanager invokes them.ConfigInjector
adds factories as delegators if the service is already present in the zend-servicemanager instance. Again, the factory is wrapped in a closure in order to curry arguments in the correct order.
Differences from service-provider
This implementation experiments a bit and allows the following as factory arguments:
- any valid PHP callable
- FQCN arguments that resolve to functors