phly/zend-servicemanager-interop

Providing service-provider compilation for zend-servicemanager

dev-master / 1.0.x-dev 2016-04-19 17:56 UTC

This package is auto-updated.

Last update: 2024-04-11 13:22:15 UTC


README

Build Status Coverage Status

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