# Change Log

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).

## [3.3.0] - 2021-07-04
### Added
- Support for psr/container v2.x [#26]

## [3.2.0] - 2020-11-30
### Fixed
- Added support for PHP 8 [#22] [#23]

## [3.1.0] - 2020-01-19
### Changed
- Zend Diactoros is deprecated, switched to Laminas Diactoros [#20], [#21].
  THIS IS A BREAKING CHANGE, so, if you want to keep using Zend Diactoros, you should configure the `Factory` as follows:
  ```php
  Factory::setFactory(
    new FactoryDiscovery([
        'request' => 'Zend\Diactoros\RequestFactory',
        'response' => 'Zend\Diactoros\ResponseFactory',
        'serverRequest' => 'Zend\Diactoros\ServerRequestFactory',
        'stream' => 'Zend\Diactoros\StreamFactory',
        'uploadedFile' => 'Zend\Diactoros\UploadedFileFactory',
        'uri' => 'Zend\Diactoros\UriFactory',
    ])
  );
  ```

## [3.0.1] - 2019-11-29
### Fixed
- Moved a dependency to dev
- Updated docs

## [3.0.0] - 2019-11-29
### Added
- Added `FactoryInterface` that returns all PSR-17 factories
- Added `FactoryDiscovery` class to discover automatically PSR-17 implementation libraries
- Added `Factory::getFactory()` and `Factory::setFactory()` to set manually PSR-17 factories
- Added `Factory::getResponseFactory()`
- Added `Factory::getRequestFactory()`
- Added `Factory::getServerRequestFactory()`
- Added `Factory::getStreamFactory()`
- Added `Factory::getUriFactory()`
- Added `Factory::getUploadedFileFactory()`
- Added `Sunrise` to the list of factories detected automatically

### Removed
- Support for PHP 7.0 and 7.1
- `Factory::setStrategy`
- `HttpErrorException::setContext` method, to make the exception class inmutable
- Traits `HasResponseFactory` and `HasStreamFactory`

## [2.2.0] - 2019-03-05
### Added
- `Middlewares\Utils\Dispatcher` implements `RequestHandlerInterface` [#16], [#17]

## [2.1.1] - 2018-08-11
### Added
- Added `Nyholm\Psr7` to the list of factories detected automatically

## [2.1.0] - 2018-08-02
### Added
- New trait `HasResponseFactory` used by many middlewares that need to configure the PSR-17 response factory.
- New trait `HasStreamFactory` used by many middlewares that need to configure the PSR-17 stream factory.

## [2.0.0] - 2018-08-01
### Added
- New methods added to `Factory` to return PSR-17 factories: `getResponseFactory`, `getServerRequestFactory`, `getStreamFactory` and `getUriFactory`.
- New method `Factory::setStrategies()` to configure the priority order of the Diactoros, Guzzle and Slim factories or register new classes.
- Added a second argument to `Callablehandler` constructor to pass a response factory

### Changed
- Exchanged abandoned `http-interop/http-factory` with `psr/http-factory`
- Changed the signature of `Factory::createServerRequest()` to be aligned with PSR-17
- Changed the signature of `Factory::createStream()` to be aligned with PSR-17
- Changed the signature of `Factory::createResponse()` to be aligned with PSR-17

## [1.2.0] - 2018-07-17
### Changed
- Updated `http-interop/http-factory` to `0.4`

## [1.1.0] - 2018-06-25
### Added
- Imported `HttpErrorException` from error handler middleware

## [1.0.0] - 2018-01-24
### Changed
- Replaced `http-interop/http-server-middleware` with `psr/http-server-middleware`.

### Removed
- Removed `Middlewares\Utils\Helpers` because contains just one helper and it's no longer needed.

## [0.14.0] - 2017-12-16
### Added
- New class `RequestHandlerContainer` implementing PSR-11 to resolve handlers in any format (classes, callables) and return PSR-15 `RequestHandlerInterface` instances. This can be used to resolve router handlers, for example.

### Changed
- The signature of `CallableHandler` was simplified. Removed `$resolver` and `$arguments` in the constructor.

### Removed
- Deleted all callable resolvers classes. Use the `RequestHandlerContainer`, or any other PSR-11 implementation.

## [0.13.0] - 2017-11-16
### Changed
- The minimum PHP version supported is 7.0
- Replaced `http-interop/http-middleware` with `http-interop/http-server-middleware`.
- Changed `Middlewares\Utils\CallableHandler` signature. Now it is instantiable and can be used as middleware and server request handler.

### Removed
- `Middlewares\Utils\CallableMiddleware`. Use `Middlewares\Utils\CallableHandler` instead.

## [0.12.0] - 2017-09-18
### Changed
- Append `.dist` suffix to phpcs.xml and phpunit.xml files
- Changed the configuration of phpcs and php_cs
- Upgraded phpunit to the latest version and improved its config file
- Updated `http-interop/http-middleware` to `0.5`

## [0.11.1] - 2017-05-06
### Changed
- `Middlewares\Utils\CallableHandler` expects one of the following values returned by the callable:
  * A `Psr\Http\Message\ResponseInterface`
  * `null` or scalar
  * an object with `__toString` method implemented
  Otherwise, throws an `UnexpectedValueException`
- `Middlewares\Helpers::fixContentLength` only modifies or removes the `Content-Length` header, but does not add it if didn't exist previously.

## [0.11.0] - 2017-03-25
### Added
- New class `Middlewares\Utils\Helpers` with common helpers to manipulate PSR-7 messages
- New helper `Middlewares\Utils\Helpers::fixContentLength` used to add/modify/remove the `Content-Length` header of a http message.

### Changed
- Updated `http-interop/http-factory` to `0.3`

## [0.10.1] - 2017-02-27
### Fixed
- Fixed changelog file

## [0.10.0] - 2017-02-27
### Changed
- Replaced deprecated `container-interop` by `psr/contaienr` (PSR-11).
- `Middlewares\Utils\Dispatcher` throws exceptions if the middlewares does not implement `Interop\Http\ServerMiddleware\MiddlewareInterface` or does not return an instance of `Psr\Http\Message\ResponseInterface`.
- Moved the default factories to `Middlewares\Utils\Factory` namespace.
- Minor code improvements.

## [0.9.0] - 2017-02-05
### Added
- Callable resolves to create callables from various representations

### Removed
- `Middlewares\Utils\CallableHandler::resolve`

## [0.8.0] - 2016-12-22
### Changed
- Updated `http-interop/http-middleware` to `0.4`
- Updated `friendsofphp/php-cs-fixer` to `2.0`

## [0.7.0] - 2016-12-06
### Added
- New static helper `Middlewares\Utils\Dispatcher::run` to create and dispatch a request easily

## [0.6.1] - 2016-12-06
### Fixed
- Ensure that the body of the serverRequest is writable and seekable.

## [0.6.0] - 2016-12-06
### Added
- ServerRequest factory
- `Middlewares\Utils\Dispatcher` accepts `Closure` as middleware components

### Changed
- `Middlewares\Utils\Dispatcher` creates automatically a response if the stack is exhausted

## [0.5.0] - 2016-11-22
### Added
- `Middlewares\Utils\CallableMiddleware` class, to create middlewares from callables
- `Middlewares\Utils\Dispatcher` class, to execute the middleware stack and return a response.

## [0.4.0] - 2016-11-13
### Changed
- Updated `http-interop/http-factory` to `0.2`

## [0.3.1] - 2016-10-03
### Fixed
- Bug in CallableHandler that resolve to the declaring class of a method instead the final class.

## [0.3.0] - 2016-10-03
### Added
- `Middlewares\Utils\CallableHandler` class, allowing to resolve and execute callables safely.

## [0.2.0] - 2016-10-01
### Added
- Uri factory

## 0.1.0 - 2016-09-30
### Added
- Response factory
- Stream factory

[#16]: https://github.com/middlewares/utils/issues/16
[#17]: https://github.com/middlewares/utils/issues/17
[#20]: https://github.com/middlewares/utils/issues/20
[#21]: https://github.com/middlewares/utils/issues/21
[#22]: https://github.com/middlewares/utils/issues/22
[#23]: https://github.com/middlewares/utils/issues/23
[#26]: https://github.com/middlewares/utils/issues/26

[3.3.0]: https://github.com/middlewares/utils/compare/v3.2.0...v3.3.0
[3.2.0]: https://github.com/middlewares/utils/compare/v3.1.0...v3.2.0
[3.1.0]: https://github.com/middlewares/utils/compare/v3.0.1...v3.1.0
[3.0.1]: https://github.com/middlewares/utils/compare/v3.0.0...v3.0.1
[3.0.0]: https://github.com/middlewares/utils/compare/v2.2.0...v3.0.0
[2.2.0]: https://github.com/middlewares/utils/compare/v2.1.1...v2.2.0
[2.1.1]: https://github.com/middlewares/utils/compare/v2.1.0...v2.1.1
[2.1.0]: https://github.com/middlewares/utils/compare/v2.0.0...v2.1.0
[2.0.0]: https://github.com/middlewares/utils/compare/v1.2.0...v2.0.0
[1.2.0]: https://github.com/middlewares/utils/compare/v1.1.0...v1.2.0
[1.1.0]: https://github.com/middlewares/utils/compare/v1.0.0...v1.1.0
[1.0.0]: https://github.com/middlewares/utils/compare/v0.14.0...v1.0.0
[0.14.0]: https://github.com/middlewares/utils/compare/v0.13.0...v0.14.0
[0.13.0]: https://github.com/middlewares/utils/compare/v0.12.0...v0.13.0
[0.12.0]: https://github.com/middlewares/utils/compare/v0.11.1...v0.12.0
[0.11.1]: https://github.com/middlewares/utils/compare/v0.11.0...v0.11.1
[0.11.0]: https://github.com/middlewares/utils/compare/v0.10.1...v0.11.0
[0.10.1]: https://github.com/middlewares/utils/compare/v0.10.0...v0.10.1
[0.10.0]: https://github.com/middlewares/utils/compare/v0.9.0...v0.10.0
[0.9.0]: https://github.com/middlewares/utils/compare/v0.8.0...v0.9.0
[0.8.0]: https://github.com/middlewares/utils/compare/v0.7.0...v0.8.0
[0.7.0]: https://github.com/middlewares/utils/compare/v0.6.1...v0.7.0
[0.6.1]: https://github.com/middlewares/utils/compare/v0.6.0...v0.6.1
[0.6.0]: https://github.com/middlewares/utils/compare/v0.5.0...v0.6.0
[0.5.0]: https://github.com/middlewares/utils/compare/v0.4.0...v0.5.0
[0.4.0]: https://github.com/middlewares/utils/compare/v0.3.1...v0.4.0
[0.3.1]: https://github.com/middlewares/utils/compare/v0.3.0...v0.3.1
[0.3.0]: https://github.com/middlewares/utils/compare/v0.2.0...v0.3.0
[0.2.0]: https://github.com/middlewares/utils/compare/v0.1.0...v0.2.0
