Skip to content

softonic/laravel-psr15-bridge

Repository files navigation

Laravel PSR-15 Middleware Bridge

Latest Version Software License Build Status Coverage Status Quality Score Total Downloads

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.

psr-15 bridge 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.