ericabouaf / middl
A generic implementation of the middleware pattern in PHP
Installs: 38
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/ericabouaf/middl
Requires
- psr/log: ^3.0
- symfony/http-foundation: ^6.4|^7.0
Requires (Dev)
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^10.5
README
A generic implementation of the middleware pattern in PHP
Installation
composer require ericabouaf/middl
Usage
Middleware Configuration
To configure the middlewares, you need to create a class that extends AbstractFlow and implements the configureMiddlewares method.
use YourNamespace\AbstractFlow; use YourNamespace\Middleware\DummyMiddleware; class SampleFlow extends AbstractFlow { protected function configureMiddlewares(): array { return [ new DummyMiddleware('example'), // Add other middlewares here ]; } }
Creating a Middleware
To create a middleware, you can extend AbstractMiddleware or BeforeAfterMiddleware according to your needs.
Example with AbstractMiddleware
use YourNamespace\AbstractMiddleware; use YourNamespace\Request; use YourNamespace\Response; class SampleCustomMiddleware extends AbstractMiddleware { public function __invoke(Request $request, callable $next): Response { // Middleware logic before calling the next middleware $response = $next($request); // Middleware logic after calling the next middleware return $response; } }
Example with BeforeAfterMiddleware
use YourNamespace\Middleware\BeforeAfterMiddleware; use YourNamespace\Request; use YourNamespace\Response; class SampleBeforeAfterMiddleware extends BeforeAfterMiddleware { public function before(Request $request): void { // Logic before calling the next middleware } public function after(Request $request, Response $response): Response { // Logic after calling the next middleware return $response; } }
Executing the Middlewares without a Flow
To execute the middlewares, use the run method of the MiddlewareRunner class.
use YourNamespace\MiddlewareRunner; use YourNamespace\Request; use YourNamespace\Response; use Psr\Log\NullLogger; $request = new Request(['param1' => 'value1']); $middlewares = [ new SampleCustomMiddleware(), new SampleBeforeAfterMiddleware(), // Add other middlewares here ]; $response = MiddlewareRunner::run($middlewares, $request, new NullLogger());