All notable changes to this project will be documented in this file, in reverse chronological order by release.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
-
#217 adds support for middleware pipelines when using the
MiddlewareListener. You can now specify an _arrayof middleware for themiddlewareattached to a route, and it will be marshaled into aZend\Stratigility\MiddlewarePipe` instance, using the same rules as if you specified a single middleware. -
#236 adds the ability to attach dispatch listeners to middleware when using the
MiddlewareListener. Attach shared events to the class identifierZend\Mvc\Controller\MiddlewareController. This feature helps ensure that listeners that should run for every controller (e.g., authentication or authorization listeners) will run even for middleware. -
#231 adds a
composer.jsonsuggestion for zendframework/zend-paginator. -
#232 adds a
composer.jsonsuggestion for zendframework/zend-log.
- Nothing.
- #211 Removed unused zend-servicemanager v2 and zend-eventmanager v2 compatibility code since zend-mvc requires v3 of those components.
- #237 fixes the return
annotations for
HttpDefaultRenderingStrategyFactory::createServiceandinjectLayoutTemplate()to beHttpDefaultRenderingStrategyand notHttpDefaultRendererStrategy.
- Nothing.
- Nothing.
- Nothing.
- #210 copies the
RouteMatchand its parameters to the PSR-7ServerRequestobject so that they are available to middleware.
- #198 adds a factory for
the
SendResponseListener, to ensure that it is injected with an event manager instance from the outset; this fixes issues with delegator factories that registered listeners with it in previous versions.
- Nothing.
- Nothing.
- #184 provides a
performance optimization for
DELETErequests toAbstractRestfulControllerinstances. - #187 removes a typehint
for
Exceptionfrom an argument inDispatchListener::marshalControllerNotFoundEvent(), allowing it to be used with PHP 7Throwableinstances.
-
#163 adds support to the
AcceptableViewModelSelectorplugin for controller maps in theview_managerconfiguration in the format:[ 'ControllerClassName' => 'view/name', ]This fixes an issue observed when running with Apigility.
-
#163 adds support to the
InjectTemplateListenerfor specifying whether or not to prefer the controller matched during routing via routing configuration:'route-name' => [ /* ... */ 'options' => [ /* ... */ 'defaults' => [ /* ... */ 'prefer_route_match_controller' => true, ], ], ],
This allows actions that might otherwise skip injection of the template to force the injection.
- Nothing.
- Nothing.
- #161 fixes the
DispatchListener::marshalBadControllerEvent()method to allow eitherThrowableorExceptiontypes for the$exceptionargument.
-
#165 adds a new controller factory,
LazyControllerAbstractFactory, that provides a Reflection-based approach to instantiating controllers. You may register it either as an abstract factory or as a named factory in your controller configuration:'controllers' => [ 'abstract_factories' => [ 'Zend\Mvc\Controller\LazyControllerAbstractFactory`, ], 'factories' => [ 'MyModule\Controller\FooController' => 'Zend\Mvc\Controller\LazyControllerAbstractFactory`, ], ],
The factory uses the typehints to lookup services in the container, using aliases for well-known services such as the
FilterManager,ValidatorManager, etc. If anarraytypehint is used with a$configparameter, theconfigservice is injected; otherwise, an empty array is provided. For all other types, a null value is injected.
- Nothing.
- Nothing.
- Nothing.
New major version! Please see:
for full details on how to migrate your v2 application.
- Nothing.
- Nothing.
- #99 removes all router
functionality (everything in the
Zend\Mvc\Routernamespace. This functionality is now provided by the zend-router component, which becomes a requirement of zend-mvc. The removal also includes all service factories related to routing, as they are provided by zend-router. - #99 removes all
console-related functionality, including the
AbstractConsoleController, theCreateConsoleNotFoundModelcontroller plugin, theConsoleResponseSender, and all classes under theZend\Mvc\View\Consolenamespace; these are now provided by the zend-mvc-console component. (That component also includes console-specific routes, which were removed from zend-router.) All service factories related to console functionality are also now provided by zend-mvc-console. - #104 removes the
prg()plugin. It can now be installed separately via the zendframework/zend-mvc-plugin-prg package. - #108 removes the
fileprg(),flashMessenger(), andidentity()plugins. These can be installed via, respectively, the zendframework/zend-mvc-plugin-fileprg, zendframework/zend-mvc-plugin-flashmessenger, and zendframework/zend-mvc-plugin-identity packages. - #110 removes the
internationalization functionality from the component, including factories for
the translator and translator loader manager. This functionality is
now provided by the zend-i18n
and zend-mvc-i18n packages;
installing
zendframework/zend-mvc-i18nwill restore i18n functionality in your application. - #115 removes the
requirement for zend-filter in the
InjectTemplateListenerby inlining the logic fromZend\Filter\Word\CamelCaseToDash. - #116 removes the functionality related to integrating zend-servicemanager and zend-di. If you used this functionality previously, it is now available via a separate package, zend-servicemanager-di.
- #117 removes the
functionality related to exposing and configuring the zend-filter
FilterPluginManager. That functionality is now exposed directly by the zend-filter component. - #118 removes the
functionality related to exposing and configuring the zend-validator
ValidatorPluginManager. That functionality is now exposed directly by the zend-validator component. - #119 removes the
functionality related to exposing and configuring the zend-serializer
SerializerAdapterManager. That functionality is now exposed directly by the zend-serializer component. - #120 removes the
functionality related to exposing and configuring the zend-hydrator
HydratorManager. That functionality is now exposed directly by the zend-hydrator component. - #54 removes the
$configurationargument (first required argument) from theZend\Mvc\Applicationconstructor. If you were directly instantiating anApplicationinstance previously (whether in your bootstrap, a factory, or tests), you will need to update how you instantiate the instance. (The argument was removed as the value was never used.) - #121 removes the
functionality related to exposing and configuring the zend-log
ProcessorPluginManagerandWriterPluginManager. That functionality is now exposed directly by the zend-log component (with the addition of exposing theFilterPluginManagerandFormatterPluginManageras well). - #123 removes the
functionality related to exposing and configuring the zend-inputfilter
InputFilterManager. That functionality is now exposed directly by the zend-inputfilter component. - #124 removes the
functionality related to exposing and configuring zend-form, including the
FormElementManager,FormAnnotationBuilder, and theFormAbstractServiceFactory. The functionality is now exposed directly by the zend-form component. - #125 removes the
functionality from the
ViewHelperManagerfactory for fetching configuration classes from other components and using them to configure the instance. In all cases, this is now done by the components themselves. - #128 removes the
ControllerLoaderFactory, and theControllerLoaderservice alias; useControllerManagerFactoryandControllerManager, respectively, instead. - #128 removes
Zend\Mvc\View\SendResponseListener; useZend\Mvc\SendResponseListenerinstead. - #128 removes
Application::send(), which has been a no-op since 2.2. - #128 removes
DispatchListener::marshallControllerNotFoundEvent(), which has proxied tomarshalControllerNotFoundEvent()since 2.2. - #128 removes
the
ServiceLocatorAwareInterfaceimplementation (setServiceLocator()/getServiceLocator()methods) fromAbstractController. You will need to inject your dependencies specifically going forward. - #128 removes
the
ServiceLocatorAwareInterfaceinitializers defined inZend\Mvc\Service\ServiceManagerConfigandZend\Mvc\Controller\ControllerManager. You will need to inject your dependencies specifically going forward. - #139 removes support for
pseudo-module template resolution using the
__NAMESPACE__routing configuration option, as it often led to conflicts when multiple modules shared a common top-level namespace. Auto-resolution now always takes into account the full namespace (minus theControllersegment).
- #113 updates
AbstractRestfulControllerto make usage of zend-json for deserializing JSON requests optional.json_decode()is now used by default, falling back toZend\Json\Json::decode()if it is available. If neither are available, an exception is now thrown. - #115 and
#128 update the
dependency list, per https://github.com/zendframework/maintainers/wiki/zend-mvc-v3-refactor:-reduce-components#required-components,
to do the following:
- Makes the following components required:
- zend-http
- zend-modulemanager
- zend-router
- zend-view
- Makes the following components optional:
- zend-json
- zend-psr7bridge
- And pares the suggestion list down to:
- zend-mvc-console
- zend-mvc-i18n
- zend-mvc-plugin-fileprg
- zend-mvc-plugin-flashmessenger
- zend-mvc-plugin-identity
- zend-mvc-plugin-prg
- zend-servicemanager-di
- Makes the following components required:
- #128 bumps the minimum supported version of zend-eventmanager, zend-servicemanager, and zend-stdlib to their v3 releases.
- #128 bumps the minimum supported PHP version to 5.6.
- #138 adds support for
PHP 7
Throwables within each of:DispatchListenerMiddlewareListener- The console
RouteNotFoundStrategyandExceptionStrategy - The HTTP
DefaultRenderingStrategyandRouteNotFoundStrategy
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- #122 fixes the
FormAnnotationBuilderFactoryto use the container'sget()method instead ofbuild()to retrieve the event manager instance.
- #94 adds a documentation recipe for using middleware withing MVC event listeners.
- Nothing.
- Nothing.
- #107 fixes an incorrect
import statement in the
DiStrictAbstractServiceFactoryFactorythat prevented it from working. - #112 fixes how the
Forwardplugin detects and detaches event listeners to ensure it works against either v2 or v3 releases of zend-eventmanager.
- Nothing.
- Nothing.
- Nothing.
- #111 fixes a bug in how
the
ConsoleExceptionStrategyFactorywhereby it was overwriting the default exception message template with an empty string when no configuration for it was provided.
- Nothing.
- Nothing.
- Nothing.
- #114 fixes an issue in
the
ServiceLocatorAwareinitializer whereby plugin manager instances were falsely identified as the container instance when under zend-servicemanager v2.
- Nothing.
- Nothing.
- Nothing.
- #97 re-introduces the
ServiceManagerfactory definition insideServiceManagerConfig, to ensure backwards compatibility.
- Nothing.
- Nothing.
- Nothing.
- #95 re-introduces the
various zend-di aliases and factories in
Zend\Mvc\Service\ServiceListenerFactory, which were accidently removed in the 2.7.0 release. - #96 fixes shared event
detachment/attachment within the
Forwardplugin to work with both v2 and v3 of zend-eventmanager. - #93 ensures that the
Console
Catchallroute factory will not fail when thedefaults$optionsarray key is missing. - #43 updates the
AbstractRestfulControllerto ensure it can accept textual (e.g., XML, YAML) data. - #79 updates the continuous integration configuration to ensure we test against lowest and highest accepted dependencies, and those in the current lockfile.
- Nothing.
- Nothing.
- Nothing.
-
#88 addresses backwards compatibility concerns raised by users due to the new deprecation notices emitted by
ServiceLocatorAwareinitializers; in particular, allAbstractControllerimplementations were raising a deprecation wen first pulled from theControllerManager.At this time, notices are now only raised in the following conditions:
- When a non-controller, non-plugin manager,
ServiceLocatorAwareinstance is detected. - When a plugin manager instance is detected that is
ServiceLocatorAwareand 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. - For controllers that do not extend
AbstractControllerbut do implementServiceLocatorAware. - When calling
getServiceLocator()from within anAbstractControllerextension; this properly calls out the practice that should be avoided and which requires updates to the controller.
- When a non-controller, non-plugin manager,
-
#31 adds three new optional arguments to the
Zend\Mvc\Applicationconstructor: an EventManager instance, a Request instance, and a Response instance. -
#36 adds more than a dozen service factories, primarily to separate conditional factories into discrete factories.
-
#32 adds
Zend\Mvc\MiddlewareListener, which allows dispatching PSR-7-based middleware implementing the signaturefunction (ServerRequestInterface $request, ResponseInterface $response). To dispatch such middleware, point themiddleware"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 originalDispatchListener, allowing normal ZF2-style controller dispatch. -
#84 publishes the documentation to https://zendframework.github.io/zend-mvc/
- Two initializers registered by
Zend\Mvc\Service\ServiceManagerConfigare now deprecated, and will be removed starting in version 3.0:ServiceManagerAwareInitializer, which injects classes implementingZend\ServiceManager\ServiceManagerAwareInterfacewith the service manager instance. Users should create factories for such classes that directly inject their dependencies instead.ServiceLocatorAwareInitializer, which injects classes implementingZend\ServiceManager\ServiceLocatorAwareInterfacewith the service manager instance. Users should create factories for such classes that directly inject their dependencies instead.
Zend\Mvc\Controller\AbstractControllerno longer directly implementsZend\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 doServiceLocatorInterfaceinjection were updated to also inject when just the methods are present.
- #31 and #76 update the component to be forwards-compatible with zend-eventmanager v3.
- #36,
#76,
#80,
#81, and
#82 update the component
to be forwards-compatible with zend-servicemanager v3. Several changes were
introduced to support this effort:
- Added a
RouteInvokableFactory, which can act as either aFactoryInterfaceorAbstractFactoryInterfacefor loading invokable route classes, including by fully qualified class name. This is registered as an abstract factory by default with theRoutePluginManager. - The
DispatchListenernow receives the controller manager instance at instantiation. - The
ViewManagerimplementations were updated, and most functionality within separated into discrete factories.
- Added a
- Nothing.
- Nothing.
- Nothing.
- #74 fixes the
FormAnnotationBuilderFactory's usage of theFormElementManager::injectFactory()method to ensure it works correctly on all versions.
- Nothing.
- Nothing.
- Nothing.
- #71 fixes the
ViewHelperManagerFactoryto be backwards-compatible with v2 by ensuring that the factories for each of theurl,basepath, anddoctypeview helpers are registered using the fully qualified class names present inZend\View\HelperPluginManager; these changes ensure requests for these helpers resolve to these override factories, instead of theInvokableFactory.
- Nothing.
- Nothing.
- Nothing.
-
#69 largely reverts #30, having the component utilize the
HydratorPluginManagerfrom 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
HydratorPluginManagerwill 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-stdlibHydratorPluginManager, because they extend those from zend-hydrator, remain compatible.
- #30 updates the component to use zend-hydrator for hydrator functionality; this provides forward compatibility with zend-hydrator, and backwards compatibility with hydrators from older versions of zend-stdlib.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- #29 updates the
zend-stdlib dependency to reference
>=2.5.0,<2.7.0to ensure hydrators will work as expected following extraction of hydrators to the zend-hydrator repository.
- Nothing.
- Nothing.
- Nothing.
- #27 fixes a condition
where non-view model results from controllers could cause errors to be
raisedin the
DefaultRenderingStrategy.