Skip to content

friends-of-reactphp/http-middleware-psr15-adapter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A PSR-15 middleware adapter for react/http

Wraps PSR-15 middleware into coroutines using RecoilPHP making them usable within react/http as middleware.

Install

To install via Composer, use the command below, it will automatically detect the latest version and bind it with ^.

composer require for/http-middleware-psr15-adapter

Usage

The following usage example uses middlewares/redirect adding one redirect, and using the callback to call several methods on the redirect middleware to change it's behavior:

$loop = Factory::create(); 
$server = new Server([
    /** Other middleware */
    new PSR15Middleware(
        $loop, // The react/event-loop (required) 
        Redirect::class, // String class name of the middleware (required)
        [ // Any constructor arguments (optional)
            ['/old-url' => '/new-url']
        ],
        function ($redirectMiddleware) {
            // This callback is optional, but when used it must return the
            // instance passed into it, or a clone of it.
            return $redirectMiddleware
                ->permanent(false)
                ->query(false)
                ->method(['GET', 'POST'])
            ;
        }
    ),
    /** Other middleware */
]);

Grouped Usage

When using more then one PSR-15 in a row the GroupedPSR15Middleware is more performing than using multiple PSR15Middleware. Consider the following example where we add middlewares/cache for expires headers:

$loop = Factory::create(); 
$server = new Server([
    /** Other middleware */
    (new GroupedPSR15Middleware($loop))->withMiddleware( 
        Redirect::class,
        [
            ['/old-url' => '/new-url']
        ],
        function ($redirectMiddleware) {
            return $redirectMiddleware
                ->permanent(false)
                ->query(false)
                ->method(['GET', 'POST'])
            ;
        }
    )->withMiddleware(Expires::class),
    /** Other middleware */
]);

Warning

This adapter rewrites the code of the PSR-15 middleware during the constructor phase, wrapping all $delegate->process($request) calls into a yield (yield $delegate->process($request)). This should work for most middleware but cannot be guaranteed for all. In case you run into issues please open an issue with the middleware in question you're having problems with.