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
andImplicitHeadMiddleware
from
Expressive into theZend\Expressive\Router\Middleware
namespace.- ImplicitHeadMiddleware should accept an optional second argument to its
constructor, a callable stream factory.
- ImplicitHeadMiddleware should accept an optional second argument to its
-
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 aMiddlewareInterface
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 theApplicationConfigInjectionTrait
,
modifying it to operate on a provided$application
instance.The
ApplicationConfigInjectionTrait
should be updated to use the static
methods of the delegator, passing the current$this
as the$application
argument. When called, the two methods defined should raise deprecation
notices. The trait itself should be marked deprecated. -
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
:-
When the routing/dispatch middleware constants are encountered:
-
Raise a deprecation notice, detailing proper usage.
-
Create and use instances of the zend-expressive-router middleware.
-
-
When double-pass middleware is encountered, raise a deprecation error,
detailing how to modify your code to use a Stratigility decorator and the
response factory. -
Mark the trait as deprecated.
-
-
Create a new class,
Zend\Expressive\Handler\NotFoundHandler
, based on
Zend\Expressive\Delegate\NotFoundDelegate
. Map theDefaultDelegate
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
- Decorate the above
NotFoundHandler
instance as middleware. - Update its factory accordingly.
- Mark it as deprecated.
- Decorate the above
-
Mark deprecated classes and traits:
-
Zend\Expressive\AppFactory
. Emit a deprecation notice from the constructor
indicating it’s going away, and to either instantiateApplication
directly, or use a container to create an instance. -
Zend\Expressive\Container\NotFoundDelegateFactory
. -
Zend\Expressive\Delegate\NotFoundDelegate
. Have it extend the above
NotFoundHandler
. -
Zend\Expressive\Emitter\EmitterStack
. -
Zend\Expressive\IsCallableInteropMiddlewareTrait
-
Zend\Expressive\Middleware\DispatchMiddleware
; extend from
zend-expressive-router implementation, and have the constructor raise a
deprecation notice. Its factory should extend the canonical
zend-expressive-router factory, and also be marked deprecated. -
Zend\Expressive\Middleware\ImplicitHeadMiddleware
; extend from
zend-expressive-router implementation, and have the constructor raise a
deprecation notice. Its factory should extend the canonical
zend-expressive-router factory, and also be marked deprecated… -
Zend\Expressive\Middleware\ImplicitOptionsMiddleware
; extend from
zend-expressive-router implementation, and have the constructor raise a
deprecation notice. Its factory should extend the canonical
zend-expressive-router factory, and also be marked deprecated… -
Zend\Expressive\Middleware\RouteMiddleware
; extend from
zend-expressive-router implementation, and have the constructor raise a
deprecation notice. Its factory should extend the canonical
zend-expressive-router factory, and also be marked deprecated…
-
-
Modify
Application
:- Mark deprecated methods:
-
pipeRoutingMiddleware()
: have this raise a deprecation notice indicating
how topipe()
. -
pipeDispatchMiddleware()
: have this raise a deprecation notice indicating
how topipe()
. -
getContainer()
-
getDefaultDelegate()
-
getEmitter()
-
- Mark deprecated methods: