laminas/laminas-servicemanager
Powerful dependency injection and service container for PHP. Manage factories, abstract factories, delegators, aliases, and shared services, with PSR-11 interoperability and robust configuration for complex applications.
laminas-servicemanager is a factory-driven DI container, which aligns well with Laravel’s existing container-based DI (via Illuminate\Container). It provides a Service Locator pattern with factories, abstract factories, and plugin managers, offering granular control over service instantiation.Validator, Repository interfaces).Illuminate\Container is PSR-11 compliant, and laminas-servicemanager is PSR-11 compatible, enabling seamless integration via adapters (e.g., Laminas\ServiceManager\Container → Illuminate\Container).app.php (bindings, singletons) can be mapped to laminas-servicemanager’s factories/abstractFactories.ValidatorPluginManager).App\Services\*) may conflict with laminas-servicemanager’s strict typing in plugin managers.App\Services\Foo, Laminas may use foo).make:provider/make:command lacks native support for laminas-servicemanager’s console tools (e.g., generate-factory-for-class).laminas-servicemanager for service resolution speed?Mockery may need adjustments for Laminas services.laminas-servicemanager for plugin managers (e.g., validators, repositories) while keeping Laravel’s container for core services.Zend\ServiceManager in legacy Laminas/Zend modules with laminas-servicemanager for consistency.laminas-servicemanager for complex factory logic (e.g., dynamic service creation based on runtime conditions).LazyServiceFactory for expensive services (e.g., database connections, external APIs).PluginManager.// Before (Laravel)
$validator = app()->make(\Illuminate\Validation\Validator::class);
// After (Laminas)
$validatorPluginManager = $container->get(ValidatorPluginManager::class);
$validator = $validatorPluginManager->get(StringLengthValidator::class);
Laminas\ServiceManager\Container and Illuminate\Container:
$laminasContainer = new \Laminas\ServiceManager\ServiceManager(config());
$laravelContainer = new \Illuminate\Container\Container();
$laravelContainer->instance(\Laminas\ServiceManager\Container::class, $laminasContainer);
laminas-servicemanager via a custom Container facade:
// config/app.php
'container' => \Laminas\ServiceManager\Container::class,
Illuminate\Container is PSR-11, so laminas-servicemanager integrates via PSR-11 interfaces.laminas-servicemanager factories.laminas-mvc, laminas-db).Zend\ServiceManager may need adapters to work with laminas-servicemanager.laminas-servicemanager.laminas-servicemanager requires explicit setup (factories, delegators, plugin managers) vs. Laravel’s auto-binding.InvalidServiceException vs. Laravel’s BindingResolutionException).tinker/artisan may need custom commands for laminas-servicemanager.Illuminate\Container quirks) may not apply.laminas-servicemanager is thread-unsafe (like Laravel’s container); use PSR-15 middleware or synchronization in multi-threaded environments.| Failure Scenario | Impact | Mitigation |
|---|---|---|
| Circular Dependency | Laminas\ServiceManager\Exception\CircularReferenceException |
Same as Laravel: refactor dependencies. |
| Invalid Service Type | InvalidServiceException in plugin managers |
Use strict typing in plugin managers. |
| Factory Resolution Failure | Silent failure or RuntimeException |
Enable debug mode and logging. |
| Lazy Service Initialization | ProxyManager errors (e.g., class not found) | Ensure class_map is correctly configured. |
| Configuration Merge Conflicts | Overwritten factories/services | Use priority-based merging (e.g., Laravel |
How can I help you explore Laravel packages today?