On this page
Migration
Migration from Version 1
This document details changes made from version 1 of this package or from its implementation in laminas-mvc. If installed, it overrides the default behavior in laminas-mvc.
'controller'
Route Array Key
In addition to providing a 'middleware'
array key in the route defaults definition, the value of the 'controller'
array key has to be explicitly set to Laminas\Mvc\Middleware\PipeSpec::class
:
/* ... */
'some-route' => [
'type' => Literal::class,
'options' => [
'route' => '/some-route',
'defaults' => [
'controller' => \Laminas\Mvc\Middleware\PipeSpec::class,
'middleware' => SomeRequestHandler::class,
],
],
],
PipeSpec
Instance in middleware
Definition
If you used to pass an array of middleware to the middleware
array key to create a middleware pipe, it has to be
rewritten to an instance of the PipeSpec
object.
Before:
/* ... */
'some-route' => [
'type' => Literal::class,
'options' => [
'route' => '/some-route',
'defaults' => [
'middleware' => [
SomeMiddleware::class,
SomeRequestHandler::class,
],
],
],
],
After:
/* ... */
'some-route' => [
'type' => Literal::class,
'options' => [
'route' => '/some-route',
'defaults' => [
'controller' => \Laminas\Mvc\Middleware\PipeSpec::class,
'middleware' => new \Laminas\Mvc\Middleware\PipeSpec(
SomeMiddleware::class,
SomeRequestHandler::class
),
],
],
],
PSR-15 Middleware
This package now supports only PSR-15 interfaces. Support of http-interop/http-middleware
and callable
middleware
has been dropped. A Closure
can still be used and its signature must match the signature of PSR-15 middleware:
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
static function (ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
You have to rewrite all your existing handlers and middleware to implement Psr\Http\Server\RequestHandlerInterface
or Psr\Http\Server\MiddlewareInterface
, respectively. Alternatively, you can decorate your middleware using one of
the decorators provided by laminas-stratigility
.
Please also refer to laminas-stratigility v3 migration guide if you used any of its features.
Removed Route Match Params from Request
Previously, for the matched route both the Laminas\Router\RouteMatch
object as well as individual matched params were
added to the PSR-7 request as attributes. This is no longer the case and only the RouteMatch
object can be accessed as
PSR-7 request attribute: $request->getAttribute(\Laminas\Router\RouteMatch::class);
Consider the following route definition: /show-album/:album_id
Previously, all matched parameters (in this case album_id
) were available directly in the $request
as an attribute:
$albumId = $request->getAttribute('album_id')
. Now, this is no longer the case. To get the album_id
param you have
to fetch it from the RouteMatch
object:
/** @var \Laminas\Router\RouteMatch $routeMatch */
$routeMatch = $request->getAttribute(\Laminas\Router\RouteMatch::class);
$albumId = $routeMatch->getParam('album_id');