# Roadmap: Expressive 2.2

**URL:** <https://discourse.laminas.dev/t/roadmap-expressive-2-2/504>\
**Category:** Contributors\
**Tags:** expressive\
**Created:** [March 1, 2018, 6:24pm UTC](https://discourse.laminas.dev/t/roadmap-expressive-2-2/504 "2018-03-01T18:24:08Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![matthew](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/matthew/32/14_2.png) [@matthew](https://discourse.laminas.dev/u/matthew)\
**Post date:** [March 1, 2018, 6:24pm UTC](https://discourse.laminas.dev/t/roadmap-expressive-2-2/504/1 "2018-03-01T18:24:08Z")

</div>

Now that Expressive 3 is in feature freeze, we can finally prepare a v2.2 release with backports and deprecations.

At this time, I’ve identified the following changes we need to make:

### zend-stratigility 2.2

This is prepared already, and only needs to be tagged. I haven’t done so yet, so as to prevent deprecation notices from appearing in existing Expressive applications.

### zend-expressive-router 2.4

- Import the `ImplicitOptionsMiddleware` and `ImplicitHeadMiddleware` from  
Expressive into the `Zend\Expressive\Router\Middleware` namespace.

- Move the new middleware into the `Middleware` subnamespace; the existing  
middleware will be marked deprecated, and extend the new versions.

- Add factories for all middleware that have constructor requirements.

- Add a `ConfigProvider`, mapping middleware classes as required.

- Mark the `RouteResult::getMiddleware()` method as deprecated, indicating that  
route results will become middleware in future iterations.

- Modifiy `Route::__construct()` to trigger a deprecation notice when a  
`$middleware` argument that is not a `MiddlewareInterface` is provided.

### zend-expressive 2.2

- Update to zend-stratigility 2.2 and up.

- Update to zend-expressive-router 2.4 and up.

- Create a `Zend\Expressive\ConfigProvider` with the default service mappings  
that are currently present in the skeleton. Alias deprecated functionality to  
new functionality as it is created, and add any new services in as required.

- Create `Zend\Expressive\Container\ApplicationConfigInjectionDelegator`. The  
class should inline the code from the `ApplicationConfigInjectionTrait`,  
modifying it to operate on a provided `$application` instance.

- Create a `Zend\Expressive\Container\ResponseFactoryFactory`  
This should create a PHP closure around creation of a response instance; pull  
it from the 3.0.0 branch. Map it in the config provider to the PSR-7  
`ResponseInterface`.

- Create a `Zend\Expressive\Container\StreamFactoryFactory`  
This should create a PHP closure around creation of a PSR-7 stream instance;  
pull it from the 3.0.0 branch. Map it in the config provider to the PSR-7  
`StreamInterface`.

- Modify the `MarshalMiddlewareTrait`:

- Create a new class, `Zend\Expressive\Handler\NotFoundHandler`, based on  
`Zend\Expressive\Delegate\NotFoundDelegate`. Map the `DefaultDelegate` service  
to the factory for this class. (The factory will need to be marked deprecated  
as well, since it will have a naming conflict with the factory for the  
`Zend\Expressive\Middleware\NotFoundHandler` factory.)

- Update `Zend\Expressive\Middleware\NotFoundHandler`

- Mark deprecated classes and traits:

- Modify `Application`:
