woody/http-server-middleware

dev-master 2019-01-30 18:18 UTC

This package is auto-updated.

Last update: 2024-08-29 04:54:36 UTC


README

实现了 PSR-15 PHP 标准。

展示

中间件组件是参与处理传入请求并创建响应的个体组件,通常与其他中间件组件一起使用,如 PSR-7 所定义。

Middleware schema

中间件按顺序被调用,以处理服务器请求。首先创建响应的中间件将响应返回给之前的中间件。您可以通过附加到请求的属性在中间件之间传输对象。

实现

中间件

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);

文档

关于 PHP 中中间件实现的文章

法语视频