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\Di
is 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\Di
as an IoC container, please switch toLaminas\Di\DefaultContainer
or 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.
-
Generator
andGeneratorInstance
inLaminas\Di\ServiceLocator
were 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-di
from yourcomposer.json
, or executecomposer remove laminas/laminas-servicemanager-di
. - Change the version constraint for
laminas/laminas-di
to^3.0
, or executecomposer require "laminas/laminas-di:^3.0"
. - Change any remaining module entries for
Laminas\ServiceManager\Di\Module
toLaminas\Di\Module
within eitherconfig/application.config.php
orconfig/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.