Version 3 is the first new major release of laminas-di, and contains a number of backward incompatible changes. These were introduced to provide better performance, stability, and predictability.
This guide describes how to migrate from Version 2 to 3.
What has changed?
This lists the most impacting changes and potential pitfalls when
laminas-di version 3.
The injector now only supports constructor injections. If you require injections based on "Aware" interfaces or setter/method injections, you need to provide these on your own. You could do this by decorating the injector instance or using initializers in laminas-servicemanager.
\Laminas\Di\Diis renamed to
\Laminas\Di\InjectorInterface. It also is no longer an IoC container which offers
has(). Container functionality is now provided via
Laminas\Di\DefaultContainer, which implements
Psr\Container\ContainerInterface. If you were using
\Laminas\Di\Dias an IoC container, please switch to
Laminas\Di\DefaultContaineror use it with laminas-servicemanager.
All programmatic and array-based definitions were dropped. If you need custom definitions, implement
The definition compiler was removed in favor of a code generator, which offers better performance.
Added PHP 7.1 type safety. All interfaces and classes are strongly typed, and all methods use return typehints, as well as scalar typehints where needed.
Laminas\Di\ServiceLocatorwere removed in favor of the code generator, which creates laminas-servicemanager compatible factories.
Migrating from v2 to v3 with laminas-mvc
When you are using laminas-mvc, you can follow these steps to upgrade:
composer.json, or execute
composer remove laminas/laminas-servicemanager-di.
- Change the version constraint for
^3.0, or execute
composer require "laminas/laminas-di:^3.0".
- Change any remaining module entries for
- If you are using any factories from laminas-servicemanager-di, you may have to
replace them with
- Migrate your laminas-di config to the new configuration format.
laminas-di configuration is now expected in
$config is your
The laminas-di config service factory will automatically attempt to migrate legacy
configurations at runtime, which gives you some time to migrate your configs.
You can use
Laminas\Di\LegacyConfig to help migrating existing configs:
use Laminas\Di\LegacyConfig; $migrated = new LegacyConfig($diConfigArray); $code = var_export($migrated->toArray(), true);
When the laminas-di config service factory is used to create configuration for use
DefaultContainer, if it detects the
$config['di'] key, it will emit an
E_USER_DEPRECATED error, pointing to this
documentation. We recommend using the above approach to convert your
configuration to the format recognized by version 3.