middlewares / trailing-slash
Middleware to normalize the trailing slash of the uri path
Installs: 321 479
Dependents: 10
Suggesters: 0
Security: 0
Stars: 27
Watchers: 3
Forks: 2
Open Issues: 0
Requires
- php: ^7.2 || ^8.0
- middlewares/utils: ^3.0 || ^4.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.0
- laminas/laminas-diactoros: ^2|^3
- oscarotero/php-cs-fixer-config: ^1.0
- phpstan/phpstan: ^0.12
- phpunit/phpunit: ^8|^9
- squizlabs/php_codesniffer: ^3.0
README
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
- PHP >= 7.2
- A PSR-7 http library
- A PSR-15 middleware dispatcher
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.