⚠️ Archived 2025-08-17Use at your own risk.
Use container-interop service providers with zend-servicemanager.
$ composer require phly/zend-servicemanager-interopuse 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());ProviderAggregateallows 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.ConfigInjectorwill create a closure around factories, to curry arguments and ensure the factories have no conflicts with how zend-servicemanager invokes them.ConfigInjectoradds 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.
This implementation experiments a bit and allows the following as factory arguments:
- any valid PHP callable
- FQCN arguments that resolve to functors