4.0.0
Release Notes for 4.0.0
Release Notes for 4.0.0
laminas-servicemanager
4.0.0 is here and finally enables projects to consume psr/container
v2.0.0 after 2 years along with several type-additions and plugin manager decoupling.
The migration guide is not written yet but will be at some point (once we added support for SM v4 to other components) later.
Added
- Several native type-additions including property-, argument- and return-types and a lot more psalm types
ServiceManager#get
,PluginManagerInterface#get
andServiceLocatorInterface#build
now explicitly implementmixed
as return-type to synchronize types withContainerInterface#get
- Support for
psr/container
v1.1 and v2.0 - Ahead of Time factory creation for services explicitly using
ReflectionBasedAbstractFactory
vialaminas-cli
Removed
- Dropped support for PHP <8.1
- Removed deprecated interfaces such as
Laminas\ServiceManager\AbstractFactoryInterface
Laminas\ServiceManager\FactoryInterface
Laminas\ServiceManager\InitializerInterface
Laminas\ServiceManager\DelegatorFactoryInterface
- CLI commands which were exposed via
vendor/bin
are removed in favor of thelaminas-cli
integration. All CLI commands of v3.x are accessible viavendor/bin/laminas servicemanager:<v3.x command name>
oncelaminas/laminas-cli
is required in the projects dependencies - Removed deprecated
ConfigInterface
andConfig
-class since these files did not provide any validation logic and were just used to proxy the configuration array structure - Removed
AbstractPluginManager#validate
andAbstractPluginManager::$instanceOf
property as in v3.x, implementing plugin managers were able to implicitlyvalidate
mixed
. In case an implementing plugin manager is providing a single$instanceOf
such aslaminas-cache
, there is a new classAbstractSingleInstancePluginManager
available which requires the$instanceOf
property to be configured
Breaking Changes
AbstractPluginManager
does not extendServiceManager
anymore and instead uses an ownServiceManager
instance under the hood to manage plugin manager related services which can be configured the same way as in v3.x- Dedicated CLI commands which were previously linked to
vendor/bin
are now integrated vialaminas-cli
and can be called viavendor/bin/laminas
oncelaminas/laminas-cli
is part of the projects requirements. Read more about how to consume these commands here. AbstractPluginManager
does not provide thevalidate
-Method anymore and requires migration action such as:- extend
AbstractSingleInstancePluginManager
in case the plugin manager only provides instances of a specific interface- or class-string (please be aware that the$instanceOf
property now requires nativestring
property type) - implement
validate
method and verify whatever type has to be returned and/or just allowmixed
as v3.x did when omitting$instanceOf
property
- extend
- Removed deprecated
ConfigInterface
andConfig
-class since these files did not provide any validation logic and were just used to proxy the configuration array structure - neither
ServiceManager
norAbstractPluginManager
do validate the provided configuration at runtime anymore. due to the psalm-types provided toServiceManager#__construct
,ServiceManager#configure
,AbstractPluginManager#__construct
andAbstractPluginManager#configure
, the configuration schema is strictly typed and thus, a miss-configuration can be mitigated on static-analysis level prior actual runtime AbstractPluginManager#get
does not accept options anymore, in case an instance with options needs to be created,AbstractPluginManager#build
has to be used
4.0.0
- Total issues resolved: 7
- Total pull requests resolved: 14
- Total contributors: 6
Enhancement
- 204: Introduce plugin manager static analysis file thanks to @boesing
- 200: Replace scope to retrieve plugin manager from
$this
toself
thanks to @boesing - 194: Narrow return type of single instance plugin managers thanks to @boesing
- 187: Remove removed binaries from composer thanks to @boesing
- 171: AOT factory creation CLI command for
ReflectionBasedAbstractFactory
mapped factories thanks to @boesing - 58: Merge release 3.5.0 into 4.0.x thanks to @github-actions[bot]
BC Break,Enhancement
- 191: Modernize codebase thanks to @boesing
- 188: Add support for
psr/container
v2 thanks to @boesing and @danielspk - 181: Remove deprecated
ServiceManager#getServiceLocator
method thanks to @boesing - 179: Remove
ServiceManager
inheritance forAbstractPluginManager
thanks to @boesing - 176: Convert old CLI standalone commands to laminas-cli commands thanks to @boesing
- 172: Convert commands to laminas-cli symfony commands thanks to @boesing
- 46: #44 add strict type declarations thanks to @GeeH
RFC
- 182: Remove
AbstractPluginManager#validate
thanks to @boesing - 174: Mark
ServiceManager
asfinal
and changeAbstractPluginManager
to use composition over inheritance thanks to @boesing
BC Break
- 170: Remove deprecated factories thanks to @boesing
- 169: Remove
container-interop/container-interop
polyfill thanks to @boesing
renovate
- 151: Update dependency psr/container to v2 thanks to @renovate[bot]