lucid / infuse
psr7 中间件
v0.0.2
2016-04-21 18:27 UTC
Requires
- php: ^5.6 || ^7.0
- lucid/signal: ^0.0.1
- psr/http-message: ^1.0
Requires (Dev)
- phpunit/phpunit: ^5.2
This package is not auto-updated.
Last update: 2024-09-14 18:53:06 UTC
README
安装
> composer require lucid/infuse
需求
- php >= 5.6
- psr/http-message
- lucid/signal
使用方法
中间件
中间件必须实现 Lucid\Infuse\MiddlewareInterface
。它们还必须返回一个包含 [Psr\Http\Message\ServerRequestInterface $request, Psr\Http\Message\ResponseInterface $respoonse]
的数组。
<?php namespace Acme\Middleware; use Lucid\Infuse\MiddlewareInterface; use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; class SessoionHandler implements MiddlewareInterface { public function handle(Request $request, Response $response) { // ... return [$request, $response]; } }
中间件队列
使用 QueueInterface::add()
将中间件添加到执行队列。中间件按后进先出顺序执行。中间件队列本身实现了 Lucid\Infuse\MiddlewareInterface
并作为入口点。
<?php use Lucid\Infuse\Queue; use Lucid\Signale\EventDispatcher; $queue = new Queue(new EventDispatcher); $queue->add($middlewareOmega); // will execute last // … $queue->add($middlewareAlpha); // fill execute first // … list ($request, $response) = $queue->handle($request, $response);
拦截执行
在中间件执行过程中,事件调度器将触发一个请求事件。如果正在停止中间件事件,则执行将停止。
<?php use Lucid\Infuse\Queue; use Lucid\Signale\EventDispatcher; use Lucid\Infuse\Events\RequestEvent; $queue = new Queue($events = new EventDispatcher, 'middleware'); $events->addHandler('middleware', function (RequestEvent $event) { $req = $event->getRequest(); $res = $event->getResponse(); if (…) { $event->setResponse(…); $event->stop(); } });