All notable changes to this project will be documented in this file, in reverse chronological order by release.
- Nothing.
- Nothing.
- Nothing.
- #247 fixes bug in controller plugin Forward, introduced in 3.1.0, where problem listeners were not detached for forwarded controller dispatch
-
#217 adds support for middleware pipelines when using the
MiddlewareListener
. You can now specify an _arrayof middleware for the
middlewareattached to a route, and it will be marshaled into a
Zend\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.json
suggestion for zendframework/zend-paginator. -
#232 adds a
composer.json
suggestion 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::createService
andinjectLayoutTemplate()
to beHttpDefaultRenderingStrategy
and notHttpDefaultRendererStrategy
.
- Nothing.
- Nothing.
- Nothing.
- #210 copies the
RouteMatch
and its parameters to the PSR-7ServerRequest
object 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
DELETE
requests toAbstractRestfulController
instances. - #187 removes a typehint
for
Exception
from an argument inDispatchListener::marshalControllerNotFoundEvent()
, allowing it to be used with PHP 7Throwable
instances.
-
#163 adds support to the
AcceptableViewModelSelector
plugin for controller maps in theview_manager
configuration in the format:[ 'ControllerClassName' => 'view/name', ]
This fixes an issue observed when running with Apigility.
-
#163 adds support to the
InjectTemplateListener
for 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 eitherThrowable
orException
types for the$exception
argument.
-
#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 anarray
typehint is used with a$config
parameter, theconfig
service 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\Router
namespace. 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
, theCreateConsoleNotFoundModel
controller plugin, theConsoleResponseSender
, and all classes under theZend\Mvc\View\Console
namespace; 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-i18n
will restore i18n functionality in your application. - #115 removes the
requirement for zend-filter in the
InjectTemplateListener
by 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
$configuration
argument (first required argument) from theZend\Mvc\Application
constructor. If you were directly instantiating anApplication
instance 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
ProcessorPluginManager
andWriterPluginManager
. That functionality is now exposed directly by the zend-log component (with the addition of exposing theFilterPluginManager
andFormatterPluginManager
as 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
ViewHelperManager
factory 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 theControllerLoader
service alias; useControllerManagerFactory
andControllerManager
, respectively, instead. - #128 removes
Zend\Mvc\View\SendResponseListener
; useZend\Mvc\SendResponseListener
instead. - #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
ServiceLocatorAwareInterface
implementation (setServiceLocator()
/getServiceLocator()
methods) fromAbstractController
. You will need to inject your dependencies specifically going forward. - #128 removes
the
ServiceLocatorAwareInterface
initializers defined inZend\Mvc\Service\ServiceManagerConfig
andZend\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 theController
segment).
- #113 updates
AbstractRestfulController
to 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
Throwable
s within each of:DispatchListener
MiddlewareListener
- The console
RouteNotFoundStrategy
andExceptionStrategy
- The HTTP
DefaultRenderingStrategy
andRouteNotFoundStrategy
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- #122 fixes the
FormAnnotationBuilderFactory
to 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
DiStrictAbstractServiceFactoryFactory
that prevented it from working. - #112 fixes how the
Forward
plugin 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
ConsoleExceptionStrategyFactory
whereby 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
ServiceLocatorAware
initializer whereby plugin manager instances were falsely identified as the container instance when under zend-servicemanager v2.
- Nothing.
- Nothing.
- Nothing.
- #97 re-introduces the
ServiceManager
factory 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
Forward
plugin to work with both v2 and v3 of zend-eventmanager. - #93 ensures that the
Console
Catchall
route factory will not fail when thedefaults
$options
array key is missing. - #43 updates the
AbstractRestfulController
to 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
ServiceLocatorAware
initializers; in particular, allAbstractController
implementations 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,
ServiceLocatorAware
instance is detected. - When a plugin manager instance is detected that is
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. - For controllers that do not extend
AbstractController
but do implementServiceLocatorAware
. - When calling
getServiceLocator()
from within anAbstractController
extension; 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\Application
constructor: 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\ServiceManagerConfig
are now deprecated, and will be removed starting in version 3.0:ServiceManagerAwareInitializer
, which injects classes implementingZend\ServiceManager\ServiceManagerAwareInterface
with the service manager instance. Users should create factories for such classes that directly inject their dependencies instead.ServiceLocatorAwareInitializer
, which injects classes implementingZend\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 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 doServiceLocatorInterface
injection 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 aFactoryInterface
orAbstractFactoryInterface
for loading invokable route classes, including by fully qualified class name. This is registered as an abstract factory by default with theRoutePluginManager
. - The
DispatchListener
now receives the controller manager instance at instantiation. - The
ViewManager
implementations 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
ViewHelperManagerFactory
to be backwards-compatible with v2 by ensuring that the factories for each of theurl
,basepath
, anddoctype
view 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
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-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.0
to 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
.