ericabouaf / middl
此包的最新版本(v1.0.0)没有可用的许可信息。
PHP中中间件模式的通用实现
v1.0.0
2024-08-23 13:06 UTC
Requires
- psr/log: ^3.0
- symfony/http-foundation: ^6.4|^7.0
Requires (Dev)
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^10.5
README
PHP中中间件模式的通用实现
安装
composer require ericabouaf/middl
用法
中间件配置
要配置中间件,您需要创建一个继承自AbstractFlow
并实现configureMiddlewares
方法的类。
use YourNamespace\AbstractFlow; use YourNamespace\Middleware\DummyMiddleware; class SampleFlow extends AbstractFlow { protected function configureMiddlewares(): array { return [ new DummyMiddleware('example'), // Add other middlewares here ]; } }
创建中间件
根据需要,您可以扩展AbstractMiddleware
或BeforeAfterMiddleware
来创建中间件。
使用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; } }
使用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; } }
在没有流的情况下执行中间件
要执行中间件,请使用MiddlewareRunner
类的run
方法。
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());