/trailing-slash

PSR-15 middleware to normalize the trailing slash of the uri path

Primary LanguagePHPMIT LicenseMIT

middlewares/trailing-slash

Latest Version on Packagist Software License Testing Total Downloads

Middleware to normalize the trailing slash of the uri path. By default removes the slash so, for example, /post/23/ is converted to /post/23. Useful if you have problems with the router.

Requirements

Installation

This package is installable and autoloadable via Composer as middlewares/trailing-slash.

composer require middlewares/trailing-slash

Example

$dispatcher = new Dispatcher([
	(new Middlewares\TrailingSlash(true))
		->redirect()
]);

$response = $dispatcher->dispatch(new ServerRequest());

Usage

By default, this middleware removes the trailing slash of the uri path. Set true to the constructor's first argument to add instead remove:

//Removes the slash, so /post/23/ is converted to /post/23
$slash = new Middlewares\TrailingSlash();

//Force the slash, so /post/23 is converted to /post/23/
$slash = new Middlewares\TrailingSlash(true);

Of course, if the path contains an extension, the slash is NOT added. For example, images/image.png remains the same, instead be converted to images/image.png/.

redirect

If the path must be converted, this option returns a 301 response redirecting to the new path. Optionally, you can provide a Psr\Http\Message\ResponseFactoryInterface that will be used to create the redirect response. If it's not defined, Middleware\Utils\Factory will be used to detect it automatically.

$responseFactory = new MyOwnResponseFactory();

//Simply removes the slash
$slash = new Middlewares\TrailingSlash();

//Returns a redirect response to the new path
$slash = (new Middlewares\TrailingSlash())->redirect();

//Returns a redirect response to the new path using a specific response factory
$slash = (new Middlewares\TrailingSlash())->redirect($responseFactory);

Please see CHANGELOG for more information about recent changes and CONTRIBUTING for contributing details.

The MIT License (MIT). Please see LICENSE for more information.