# Changelog

All notable changes to this project will be documented in this file, in reverse chronological order by release.

## 3.1.1 - 2017-11-24

### Added

- Nothing.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- [#247](https://github.com/zendframework/zend-mvc/pull/247) fixes bug in
  controller plugin Forward, introduced in 2.1.0, where problem listeners were
  not detached for forwarded controller dispatch

## 3.1.0 - 2017-05-01

### Added

- [#217](https://github.com/zendframework/zend-mvc/pull/217) adds support for
  middleware _pipelines_ when using the `MiddlewareListener`. You can now
  specify an _array` of middleware for the `middleware` attached 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](https://github.com/zendframework/zend-mvc/pull/236) adds the ability to
  attach dispatch listeners to middleware when using the `MiddlewareListener`.
  Attach shared events to the class identifier `Zend\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](https://github.com/zendframework/zend-mvc/pull/231) adds a
  `composer.json` suggestion for zendframework/zend-paginator.

- [#232](https://github.com/zendframework/zend-mvc/pull/232) adds a
  `composer.json` suggestion for zendframework/zend-log.

### Deprecated

- Nothing.

### Removed

- [#211](https://github.com/zendframework/zend-mvc/pull/211) Removed unused
  zend-servicemanager v2 and zend-eventmanager v2 compatibility code since
  zend-mvc requires v3 of those components.

### Fixed

- [#237](https://github.com/zendframework/zend-mvc/pull/237) fixes the return
  annotations for `HttpDefaultRenderingStrategyFactory::createService` and
  `injectLayoutTemplate()` to be `HttpDefaultRenderingStrategy` and not
  `HttpDefaultRendererStrategy`.

## 3.0.4 - 2016-12-20

### Added

- Nothing.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- [#210](https://github.com/zendframework/zend-mvc/pull/210) copies the 
  `RouteMatch` and its parameters to the PSR-7 `ServerRequest` object so that
  they are available to middleware.

## 3.0.3 - 2016-08-29

### Added

- [#198](https://github.com/zendframework/zend-mvc/pull/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.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- [#184](https://github.com/zendframework/zend-mvc/pull/184) provides a
  performance optimization for `DELETE` requests to `AbstractRestfulController`
  instances.
- [#187](https://github.com/zendframework/zend-mvc/pull/187) removes a typehint
  for `Exception` from an argument in
  `DispatchListener::marshalControllerNotFoundEvent()`, allowing it to be used
  with PHP 7 `Throwable` instances.

## 3.0.2 - 2016-06-30

### Added

- [#163](https://github.com/zendframework/zend-mvc/pull/163) adds support to the
  `AcceptableViewModelSelector` plugin for controller maps in the `view_manager`
  configuration in the format:

  ```php
  [
      'ControllerClassName' => 'view/name',
  ]
  ```

  This fixes an issue observed when running with Apigility.

- [#163](https://github.com/zendframework/zend-mvc/pull/163) adds support to the
  `InjectTemplateListener` for specifying whether or not to prefer the
  controller matched during routing via routing configuration:

  ```php
  'route-name' => [
      /* ... */
      'options' => [
          /* ... */
          'defaults' => [
              /* ... */
              'prefer_route_match_controller' => true,
          ],
      ],
  ],
  ```

  This allows actions that might otherwise skip injection of the template
  to force the injection.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- [#161](https://github.com/zendframework/zend-mvc/pull/161) fixes the
  `DispatchListener::marshalBadControllerEvent()` method to allow either
  `Throwable` or `Exception` types for the `$exception` argument.

## 3.0.1 - 2016-06-23

### Added

- [#165](https://github.com/zendframework/zend-mvc/pull/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:

  ```php
  '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 an `array` typehint is used with a `$config`
  parameter, the `config` service is injected; otherwise, an empty array is
  provided. For all other types, a null value is injected.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- Nothing.

## 3.0.0 - 2016-05-31

New major version! Please see:

- [doc/book/migration/to-v3-0.md](doc/book/migration/to-v3-0.md)

for full details on how to migrate your v2 application.

### Added

- Nothing.

### Deprecated

- Nothing.

### Removed

- [#99](https://github.com/zendframework/zend-mvc/pull/99) removes all router
  functionality (everything in the `Zend\Mvc\Router` namespace. This
  functionality is now provided by the [zend-router](https://zendframework.github.io/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](https://github.com/zendframework/zend-mvc/pull/99) removes all
  console-related functionality, including the `AbstractConsoleController`, the
  `CreateConsoleNotFoundModel` controller plugin, the `ConsoleResponseSender`,
  and all classes under the `Zend\Mvc\View\Console` namespace; these are now
  provided by the [zend-mvc-console](https://zendframework.github.io/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](https://github.com/zendframework/zend-mvc/pull/104) removes the `prg()`
  plugin. It can now be installed separately via the
  zendframework/zend-mvc-plugin-prg package.
- [#108](https://github.com/zendframework/zend-mvc/pull/108) removes the
  `fileprg()`, `flashMessenger()`, and `identity()` 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](https://github.com/zendframework/zend-mvc/pull/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](https://zendframework.github.io/zend-i18n/)
  and [zend-mvc-i18n](https://zendframework.github.io/zend-mvc-i18n/) packages;
  installing `zendframework/zend-mvc-i18n` will restore i18n functionality in
  your application.
- [#115](https://github.com/zendframework/zend-mvc/pull/115) removes the
  requirement for zend-filter in the `InjectTemplateListener` by inlining the
  logic from `Zend\Filter\Word\CamelCaseToDash`.
- [#116](https://github.com/zendframework/zend-mvc/pull/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](https://zendframework.github.io/zend-servicemanager-di/]).
- [#117](https://github.com/zendframework/zend-mvc/pull/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](https://github.com/zendframework/zend-mvc/pull/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](https://github.com/zendframework/zend-mvc/pull/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](https://github.com/zendframework/zend-mvc/pull/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](https://github.com/zendframework/zend-mvc/pull/54) removes the
  `$configuration` argument (first required argument) from the
  `Zend\Mvc\Application` constructor. If you were directly instantiating an
  `Application` 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](https://github.com/zendframework/zend-mvc/pull/121) removes the
  functionality related to exposing and configuring the zend-log
  `ProcessorPluginManager` and `WriterPluginManager`. That functionality is now
  exposed directly by the zend-log component (with the addition of exposing the
  `FilterPluginManager` and `FormatterPluginManager` as well).
- [#123](https://github.com/zendframework/zend-mvc/pull/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](https://github.com/zendframework/zend-mvc/pull/124) removes the
  functionality related to exposing and configuring zend-form, including the
  `FormElementManager`, `FormAnnotationBuilder`, and the
  `FormAbstractServiceFactory`. The functionality is now exposed directly by the
  zend-form component.
- [#125](https://github.com/zendframework/zend-mvc/pull/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](https://github.com/zendframework/zend-mvc/pull/128) removes the
  `ControllerLoaderFactory`, and the `ControllerLoader` service alias; use
  `ControllerManagerFactory` and `ControllerManager`, respectively, instead.
- [#128](https://github.com/zendframework/zend-mvc/pull/128) removes
  `Zend\Mvc\View\SendResponseListener`; use `Zend\Mvc\SendResponseListener`
  instead.
- [#128](https://github.com/zendframework/zend-mvc/pull/128) removes
  `Application::send()`, which has been a no-op since 2.2.
- [#128](https://github.com/zendframework/zend-mvc/pull/128) removes
  `DispatchListener::marshallControllerNotFoundEvent()`, which has proxied to
  `marshalControllerNotFoundEvent()` since 2.2.
- [#128](https://github.com/zendframework/zend-mvc/pull/128) removes
  the `ServiceLocatorAwareInterface` implementation
  (`setServiceLocator()`/`getServiceLocator()` methods) from
  `AbstractController`. You will need to inject your dependencies specifically
  going forward.
- [#128](https://github.com/zendframework/zend-mvc/pull/128) removes
  the `ServiceLocatorAwareInterface` initializers defined in
  `Zend\Mvc\Service\ServiceManagerConfig` and
  `Zend\Mvc\Controller\ControllerManager`. You will need to inject your
  dependencies specifically going forward.
- [#139](https://github.com/zendframework/zend-mvc/pull/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 the `Controller` segment).

### Fixed

- [#113](https://github.com/zendframework/zend-mvc/pull/113) updates
  `AbstractRestfulController` to make usage of zend-json for deserializing JSON
  requests optional. `json_decode()` is now used by default, falling back to
  `Zend\Json\Json::decode()` if it is available. If neither are available, an
  exception is now thrown.
- [#115](https://github.com/zendframework/zend-mvc/pull/115) and
  [#128](https://github.com/zendframework/zend-mvc/pull/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
- [#128](https://github.com/zendframework/zend-mvc/pull/128) bumps the minimum
  supported version of zend-eventmanager, zend-servicemanager, and zend-stdlib
  to their v3 releases.
- [#128](https://github.com/zendframework/zend-mvc/pull/128) bumps the minimum
  supported PHP version to 5.6.

## 2.7.8 - 2016-05-31

### Added

- [#138](https://github.com/zendframework/zend-mvc/pull/138) adds support for
  PHP 7 `Throwable`s within each of:
  - `DispatchListener`
  - `MiddlewareListener`
  - The console `RouteNotFoundStrategy` and `ExceptionStrategy`
  - The HTTP `DefaultRenderingStrategy` and `RouteNotFoundStrategy`

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- Nothing.

## 2.7.7 - 2016-04-12

### Added

- Nothing.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- [#122](https://github.com/zendframework/zend-mvc/pull/122) fixes the
  `FormAnnotationBuilderFactory` to use the container's `get()` method instead
  of `build()` to retrieve the event manager instance.

## 2.7.6 - 2016-04-06

### Added

- [#94](https://github.com/zendframework/zend-mvc/pull/94) adds a documentation
  recipe for using middleware withing MVC event listeners.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- [#107](https://github.com/zendframework/zend-mvc/pull/107) fixes an incorrect
  import statement in the `DiStrictAbstractServiceFactoryFactory` that prevented
  it from working.
- [#112](https://github.com/zendframework/zend-mvc/pull/112) fixes how the
  `Forward` plugin detects and detaches event listeners to ensure it works
  against either v2 or v3 releases of zend-eventmanager.

## 2.7.5 - 2016-04-06

### Added

- Nothing.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- [#111](https://github.com/zendframework/zend-mvc/pull/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.

## 2.7.4 - 2016-04-03

### Added

- Nothing.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- [#114](https://github.com/zendframework/zend-mvc/pull/114) fixes an issue in
  the `ServiceLocatorAware` initializer whereby plugin manager instances were
  falsely identified as the container instance when under zend-servicemanager v2.

## 2.7.3 - 2016-03-08

### Added

- Nothing.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- [#97](https://github.com/zendframework/zend-mvc/pull/97) re-introduces the
  `ServiceManager` factory definition inside `ServiceManagerConfig`, to ensure
  backwards compatibility.

## 2.7.2 - 2016-03-08

### Added

- Nothing.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- [#95](https://github.com/zendframework/zend-mvc/pull/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](https://github.com/zendframework/zend-mvc/pull/96) fixes shared event
  detachment/attachment within the `Forward` plugin to work with both v2 and v3
  of zend-eventmanager.
- [#93](https://github.com/zendframework/zend-mvc/pull/93) ensures that the
  Console `Catchall` route factory will not fail when the `defaults` `$options`
  array key is missing.
- [#43](https://github.com/zendframework/zend-mvc/pull/43) updates the
  `AbstractRestfulController` to ensure it can accept textual (e.g., XML, YAML)
  data.
- [#79](https://github.com/zendframework/zend-mvc/pull/79) updates the
  continuous integration configuration to ensure we test against lowest and
  highest accepted dependencies, and those in the current lockfile.

## 2.7.1 - 2016-03-02

### Added

- Nothing.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- [#88](https://github.com/zendframework/zend-mvc/pull/88) addresses backwards
  compatibility concerns raised by users due to the new deprecation notices
  emitted by `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:

  - 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 implement
    `ServiceLocatorAware`.
  - When calling `getServiceLocator()` from within an `AbstractController`
    extension; this properly calls out the practice that should be avoided and
    which requires updates to the controller.

## 2.7.0 - 2016-03-01

### Added

- [#31](https://github.com/zendframework/zend-mvc/pull/31) adds three new
  optional arguments to the `Zend\Mvc\Application` constructor: an EventManager
  instance, a Request instance, and a Response instance.
- [#36](https://github.com/zendframework/zend-mvc/pull/36) adds more than a
  dozen service factories, primarily to separate conditional factories into
  discrete factories.
- [#32](https://github.com/zendframework/zend-mvc/pull/32) adds
  `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:

  ```php
  [ '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.
- [#84](https://github.com/zendframework/zend-mvc/pull/84) publishes the
  documentation to https://zendframework.github.io/zend-mvc/

### Deprecated

- Two initializers registered by `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.

### Removed

- `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.

### Fixed

- [#31](https://github.com/zendframework/zend-mvc/pull/31) and
  [#76](https://github.com/zendframework/zend-mvc/pull/76) update the component
  to be forwards-compatible with zend-eventmanager v3.
- [#36](https://github.com/zendframework/zend-mvc/pull/36),
  [#76](https://github.com/zendframework/zend-mvc/pull/76),
  [#80](https://github.com/zendframework/zend-mvc/pull/80),
  [#81](https://github.com/zendframework/zend-mvc/pull/81), and
  [#82](https://github.com/zendframework/zend-mvc/pull/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 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`.
  - The `DispatchListener` now receives the controller manager instance at
    instantiation.
  - The `ViewManager` implementations were updated, and most functionality
    within separated into discrete factories.

## 2.6.3 - 2016-02-23

### Added

- Nothing.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- [#74](https://github.com/zendframework/zend-mvc/pull/74) fixes the
  `FormAnnotationBuilderFactory`'s usage of the
  `FormElementManager::injectFactory()` method to ensure it works correctly on
  all versions.

## 2.6.2 - 2016-02-22

### Added

- Nothing.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- [#71](https://github.com/zendframework/zend-mvc/pull/71) fixes the
  `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`.

## 2.6.1 - 2016-02-16

### Added

- Nothing.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- [#69](https://github.com/zendframework/zend-mvc/pull/69) largely reverts
  [#30](https://github.com/zendframework/zend-mvc/pull/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-stdlib `HydratorPluginManager`, because
  they extend those from zend-hydrator, remain compatible. 

## 2.6.0 - 2015-09-22

### Added

- [#30](https://github.com/zendframework/zend-mvc/pull/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.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- Nothing.

## 2.5.3 - 2015-09-22

### Added

- Nothing.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- [#29](https://github.com/zendframework/zend-mvc/pull/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.

## 2.5.2 - 2015-09-14

### Added

- Nothing.

### Deprecated

- Nothing.

### Removed

- Nothing.

### Fixed

- [#27](https://github.com/zendframework/zend-mvc/pull/27) fixes a condition
  where non-view model results from controllers could cause errors to be
  raisedin the `DefaultRenderingStrategy`.
