woody / http-server-middleware
dev-master
2019-01-30 18:18 UTC
Requires
- php: ^7.1
- psr/http-server-middleware: ^1.0
- woody/http-message: dev-master
Requires (Dev)
This package is auto-updated.
Last update: 2024-08-29 04:54:36 UTC
README
实现了 PSR-15 PHP 标准。
展示
中间件组件是参与处理传入请求并创建响应的个体组件,通常与其他中间件组件一起使用,如 PSR-7 所定义。
中间件按顺序被调用,以处理服务器请求。首先创建响应的中间件将响应返回给之前的中间件。您可以通过附加到请求的属性在中间件之间传输对象。
实现
中间件
namespace App; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; use Woody\Http\Message\Response; use Woody\Http\Server\Middleware\MiddlewareInterface; class MyAppMiddleware implements MiddlewareInterface { public function isEnabled(bool $debug): bool { return true; } public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { if ($request->getUri()->getPath() == '/test') { $data = 'Text 1'; } else { $data = 'Text 2'; } return new Response(200, ['Content-Type' => 'application/json'], json_encode($data)); } }
中间件声明
注意:此示例需要 http-interop/response-sender
,可在 此处 获取。
include 'vendor/autoload.php'; use Woody\Http\Server\Middleware\Dispatcher; use Woody\Http\Message\ServerRequest; $request = ServerRequest::fromGlobals(); $dispatcher = new Dispatcher(); $dispatcher->pipe(new LogMiddleware()); $dispatcher->pipe(new ExceptionMiddleware()); $dispatcher->pipe(new SecurityMiddleware()); $dispatcher->pipe(new MyAppMiddleware()); $response = $dispatcher->handle($request); Http\Response\send($response);
回调声明
dispatcher
也可以接受回调函数。
include 'vendor/autoload.php'; use Woody\Http\Message\Response; use Woody\Http\Server\Middleware\Dispatcher; use Woody\Http\Message\ServerRequest; $request = ServerRequest::fromGlobals(); $dispatcher = new Dispatcher(); $dispatcher->pipe(new LogMiddleware()); $dispatcher->pipe(function(ServerRequest $request, Dispatcher $dispatcher) { return new Response(200, ['Content-Type' => 'application/json'], json_encode(['user_id' => 42])); }); $response = $dispatcher->handle($request); Http\Response\send($response);