softonic / laravel-psr15-bridge
Laravel PSR-15 middleware bridge
Requires
- php: >=8.1
- illuminate/http: ^9.0 || ^10.0 || ^11.0
- nyholm/psr7: ^1.2
- psr/http-server-middleware: ^1.0
- symfony/psr-http-message-bridge: ^2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpunit/phpunit: ^10.0
README
This package provides a Laravel middleware bridge for PSR-15 inspired in jshannon63/laravel-psr15-middleware.
Installation
To install, use composer:
composer require softonic/laravel-psr15-bridge
You are ready to use it!
Usage
The bridge adapter receive a PSR-15 middleware via injection, so the bridge is transparent for Laravel and you can use it as any other middleware.
Example based on OpenApi Validation Middleware:
Wrapping OpenApi Validation Middleware within the bridge.
// app/Providers/AppServiceProvider.php use Softonic\Laravel\Middleware\Psr15Bridge\Psr15MiddlewareAdapter; /** * Register any application services. * * @return void */ public function register() { $this->app->bind(OpenApiValidation::class, function () { // Setup your PSR-15 middleware here $validator = new \HKarlstrom\Middleware\OpenApiValidation('schema.json'); // Return it wrapped in the adapter to make Laravel accept it return Psr15MiddlewareAdapter::adapt($validator); }); }
Now you can use it anywhere or for example generate an alias.
// app/Http/Kernel.php protected $routeMiddleware = [ ... 'openapi-validation' => OpenApiValidation::class, ];
Check laravel middleware for more information.
How it works
In the next diagram you can see the request and response flow.
As you can see, when you execute Psr15MiddlewareAdapter::adapt($validator);
, you are adding an envelop to the PSR-15
middleware that converts the request and response transparently for the middleware format Laravel expects.
Testing
softonic/laravel-psr15-bridge
has a PHPUnit test suite and a coding style compliance test suite using PHP CS Fixer.
To run the tests, run the following command from the project folder.
$ docker-compose run test
License
The Apache 2.0 license. Please see LICENSE for more information.