All notable changes to this project will be documented in this file, in reverse chronological order by release.
require-dev to require, as it is
a requirement of the RequestFactory, and removal of the package causes that factory to fail.Zend\Mvc\Controller\PluginManager implementation to vary
based on zend-servicemanager major version detected in order to ensure the
signature of get() will be correct regardless of version.Updates the Zend\Mvc\Controller\PluginManager::get() signature to match
that of Zend\ServiceManager\AbstractPluginManager::get(), and thus ensure
compatibility when running under PHP 7.2.
#234 fixes docblock
annotations in AbstractActionController::indexAction and notFoundAction to
indicate they return a ViewModel|ConsoleModel and not array.
FormAnnotationBuilderFactory::injectFactory() to pass the correct
arguments to the plugin manager's injectFactory() initializer when running
under zend-servicemanager v2.replace
entry to the composer.json indicating the package replaces
zendframework/zend-router. This is done to prevent errors from installing both
zend-mvc v2 with zend-router, which could lead to subtle errors when checking
exceptions, locating route types, etc. Users should upgrade to zend-mvc v3 if
they wish to use the standalone zend-router package.require-dev and suggest sections of
composer.json, and updates the RouteNotFoundStrategy::getConsoleBanner()
method to no longer use the version constant. Since zend-version has had no
real meaning since the 2.5 release, this removes ambiguity for end-users.FormAnnotationBuilderFactory injects the builder with the
FormElementManager service such that it will work with the latest zend-form
releases.Zend\Mvc\Service\DiAbstractServiceFactoryFactory and
Zend\Mvc\Service\DiServiceInitializerFactory, now raise exceptions if they
detect they are running under zend-servicemanager v3, and prompt the developer
to install zend-servicemanager-di.Zend\Mvc\Service\DiAbstractServiceFactoryFactoryZend\Mvc\Service\DiFactoryZend\Mvc\Service\DiServiceInitializerFactoryZend\Mvc\Service\DiStrictAbstractServiceFactoryZend\Mvc\Service\DiStrictAbstractServiceFactoryFactoryControllerLoaderFactory as deprecated via annotation (though it has been
noted as such in the documentation for several years). Use
Zend\Mvc\Service\ControllerManagerFactory instead.Zend\Mvc\Service\DiAbstractServiceFactoryFactory.$exception argument of DispatchListener::marshalBadControllerEvent(),
fixing an issue when PHP 7 Error types are caught and passed to the method.Throwables within each of:
DispatchListenerMiddlewareListenerRouteNotFoundStrategy and ExceptionStrategyDefaultRenderingStrategy and RouteNotFoundStrategyFormAnnotationBuilderFactory to use the container's get() method instead
of build() to retrieve the event manager instance.DiStrictAbstractServiceFactoryFactory that prevented
it from working.Forward plugin detects and detaches event listeners to ensure it works
against either v2 or v3 releases of zend-eventmanager.ConsoleExceptionStrategyFactory whereby it was overwriting the default
exception message template with an empty string when no configuration for it
was provided.ServiceLocatorAware initializer whereby plugin manager instances were
falsely identified as the container instance when under zend-servicemanager v2.ServiceManager factory definition inside ServiceManagerConfig, to ensure
backwards compatibility.Zend\Mvc\Service\ServiceListenerFactory,
which were accidently removed in the 2.7.0 release.Forward plugin to work with both v2 and v3
of zend-eventmanager.Catchall route factory will not fail when the defaults $options
array key is missing.AbstractRestfulController to ensure it can accept textual (e.g., XML, YAML)
data.ServiceLocatorAware initializers; in particular, all
AbstractController implementations were raising a deprecation wen first
pulled from the ControllerManager.
At this time, notices are now only raised in the following conditions:
ServiceLocatorAware instance
is detected.ServiceLocatorAware and
does not have a composed service locator. In this situation, the deprecation
notice indicates that the factory for the plugin manager should be updated
to inject the service locator via the constructor.AbstractController but do implement
ServiceLocatorAware.getServiceLocator() from within an AbstractController
extension; this properly calls out the practice that should be avoided and
which requires updates to the controller.Zend\Mvc\Application constructor: an EventManager
instance, a Request instance, and a Response instance.Zend\Mvc\MiddlewareListener, which allows dispatching PSR-7-based middleware
implementing the signature function (ServerRequestInterface $request,
ResponseInterface $response). To dispatch such middleware, point the
middleware "default" for a given route to a service name or callable that
will resolve to the middleware: [ 'router' => 'routes' => [
'path' => [
'type' => 'Literal',
'options' => [
'route' => '/path',
'defaults' => [
'middleware' => 'ServiceNameForPathMiddleware',
],
],
],
]
This new listener listens at the same priority as the DispatchListener, but,
due to being registered earlier, will invoke first; if the route match does
not resolve to middleware, it will fall through to the original
DispatchListener, allowing normal ZF2-style controller dispatch.
Zend\Mvc\Service\ServiceManagerConfig are now
deprecated, and will be removed starting in version 3.0:
ServiceManagerAwareInitializer, which injects classes implementing
Zend\ServiceManager\ServiceManagerAwareInterface with the service manager
instance. Users should create factories for such classes that directly
inject their dependencies instead.ServiceLocatorAwareInitializer, which injects classes implementing
Zend\ServiceManager\ServiceLocatorAwareInterface with the service manager
instance. Users should create factories for such classes that directly
inject their dependencies instead.Zend\Mvc\Controller\AbstractController no longer directly implements
Zend\ServiceManager\ServiceLocatorAwareInterface, but still implements the
methods defined in that interface. This was done to provide
forwards-compatibility, as zend-servicemanager v3 no longer defines the
interface. All initializers that do ServiceLocatorInterface injection were
updated to also inject when just the methods are present.RouteInvokableFactory, which can act as either a
FactoryInterface or AbstractFactoryInterface for loading invokable route
classes, including by fully qualified class name. This is registered as an
abstract factory by default with the RoutePluginManager.DispatchListener now receives the controller manager instance at
instantiation.ViewManager implementations were updated, and most functionality
within separated into discrete factories.FormAnnotationBuilderFactory's usage of the
FormElementManager::injectFactory() method to ensure it works correctly on
all versions.ViewHelperManagerFactory to be backwards-compatible with v2 by ensuring that
the factories for each of the url, basepath, and doctype view helpers
are registered using the fully qualified class names present in
Zend\View\HelperPluginManager; these changes ensure requests for these
helpers resolve to these override factories, instead of the
InvokableFactory.HydratorPluginManager from zend-stdlib 2.7.5. This was done to
provide backwards compatibility; while zend-stdlib Hydrator types can be used
in place of zend-hydrator types, the reverse is not true.You can make your code forwards-compatible with version 3, where the
HydratorPluginManager will be pulled from zend-hydrator, by updating your
typehints to use the zend-hydrator classes instead of those from zend-stdlib;
the instances returned from the zend-stdlib HydratorPluginManager, because
they extend those from zend-hydrator, remain compatible.
>=2.5.0,<2.7.0 to ensure hydrators
will work as expected following extraction of hydrators to the zend-hydrator
repository.DefaultRenderingStrategy.