Migration
Migration Guide
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
upgrading to 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 offersget()/has(). Container functionality is now provided viaLaminas\Di\DefaultContainer, which implementsPsr\Container\ContainerInterface. If you were using\Laminas\Di\Dias an IoC container, please switch toLaminas\Di\DefaultContaineror use it with laminas-servicemanager. -
All programmatic and array-based definitions were dropped. If you need custom definitions, implement
\Laminas\Di\Definition\DefinitionInterface. -
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.
-
GeneratorandGeneratorInstanceinLaminas\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:
- Remove
laminas/laminas-servicemanager-difrom yourcomposer.json, or executecomposer remove laminas/laminas-servicemanager-di. - Change the version constraint for
laminas/laminas-dito^3.0, or executecomposer require "laminas/laminas-di:^3.0". - Change any remaining module entries for
Laminas\ServiceManager\Di\ModuletoLaminas\Di\Modulewithin eitherconfig/application.config.phporconfig/modules.config.php. - If you are using any factories from laminas-servicemanager-di, you may have to
replace them with
Laminas\Di\Container\AutowireFactory. - Migrate your laminas-di config to the new configuration format.
Migrating configuration
laminas-di configuration is now expected in $config['dependencies']['auto'],
where $config is your config service.
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
with the AutowireFactory and/or 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.