sheridan / version-middleware
PSR-7 middleware for managing routable versioning.
v2.0.0
2026-03-18 00:56 UTC
Requires
- php: ^8.2
- psr/container: ^1.1 || ^2.0
- psr/http-message: ^1.1 || ^2.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- laminas/laminas-diactoros: ^3.5
- phpunit/phpunit: ^11.5
- roave/security-advisories: dev-master
- squizlabs/php_codesniffer: ^3.11
This package is auto-updated.
Last update: 2026-03-18 01:05:09 UTC
README
PSR-15 middleware that extracts API version prefixes from the URL path. Works with any PSR-15 framework (Mezzio, Slim, etc.).
Installation
Install using composer:
$ composer require sheridan/version-middleware
Usage
Add to pipeline
use Psr7Versioning\VersionMiddleware;
...
$app->pipe(ServerMiddleware::class);
$app->pipe(VersionMiddleware::class);
$app->pipe(RouteMiddleware::class);
...
Routing
Now you can add route based on path, for example:
$app->get('/home', 'Handler\HomePageHandler::class', 'home');
$app->get('/dev/home', 'Handler\dev\HomePageHandler::class', 'home.dev');
$app->get('/latest/home', 'Handler\latest\HomePageHandler::class', 'home.latest');
$app->get('/legacy/home', 'Handler\legacy\HomePageHandler::class', 'home.legacy');
$app->get('/v1/home', 'Handler\v1\HomePageHandler::class', 'home.v1');
$app->get('/v2/home', 'Handler\v2\HomePageHandler::class', 'home.v2');
Built in version routes are
- dev
- latest
- legacy
- vnnn (where nnn is a number)
To get the version number from a request:
use Psr7Versioning\VersionMiddleware;
...
public function handle (ServerRequest $request) : ResponseInterface
{
// get current version (ie dev | latest)
$version = $request->getAttribute(VersionMiddleware::class);
}