leocavalcante / request-callback
Swoole 请求回调,适用于 PSR 兼容处理程序。
v0.1.1
2021-01-21 20:46 UTC
Requires
- php: >=7.4
- ext-swoole: ^4.5
- laminas/laminas-diactoros: ^2.5
- psr/http-factory: ^1.0
- psr/http-message: ^1.0
- psr/http-server-handler: ^1.0
Requires (Dev)
- laminas/laminas-stratigility: ^3.3
- pestphp/pest: ^0.3.19 || ^1.0.0
- swoole/ide-helper: ^4.5
- vimeo/psalm: ^4.3
- dev-main
- v0.1.1
- v0.1.0
- dev-dependabot/composer/main/vimeo/psalm-4.30.0
- dev-dependabot/composer/main/filp/whoops-2.14.6
- dev-dependabot/composer/main/symfony/console-5.4.15
- dev-dependabot/composer/main/pestphp/pest-1.22.1
- dev-dependabot/composer/main/composer/xdebug-handler-2.0.5
- dev-dependabot/composer/main/nunomaduro/collision-5.11.0
- dev-dependabot/composer/main/swoole/ide-helper-4.8.1
- dev-dependabot/add-v2-config-file
This package is auto-updated.
Last update: 2024-09-08 15:15:45 UTC
README
安装
composer require leocavalcante/request-callback
用法
只需创建一个装饰 RequestHandlerInterface
的回调函数,并将其作为监听器传递给 onRequest
事件中的 Swoole\Http\Server
。
use Swoole\Http\RequestCallback; $callback = new RequestCallback(\Psr\Http\Server\RequestHandlerInterface);
示例
Hello, World!
use Laminas\Diactoros\Response\TextResponse; use Psr\Http\Message\{ResponseInterface, ServerRequestInterface}; use Psr\Http\Server\RequestHandlerInterface; use Swoole\Http\{RequestCallback, Server}; $server = new Server('localhost', 9501); $server->on('request', new RequestCallback(new class implements RequestHandlerInterface { public function handle(ServerRequestInterface $request): ResponseInterface { return new TextResponse(sprintf('Hello, %s!', $request->getQueryParams()['name'] ?? 'World')); } })); $server->start();
为了帮助您处理样板代码,您可以使用 RequestCallback::fromCallable(callable)
工厂方法
$server->on('request', RequestCallback::fromCallable(static function (ServerRequestInterface $request): ResponseInterface { return new TextResponse(sprintf('Hello, %s!', $request->getQueryParams()['name'] ?? 'World')); }));
如果您像我一样,想要更多的便利,可以使用 request_callback(RequestHandlerInterface|callable)
函数
$server->on('request', request_callback( static fn(ServerRequestInterface $request): ResponseInterface => new TextResponse(sprintf('Hello, %s!', $request->getQueryParams()['name'] ?? 'World'))) );
您可以将 RequestHandlerInterface
或 callable
传递,它会自动识别。
中间件
use Laminas\Diactoros\Response\JsonResponse; use Laminas\Stratigility\MiddlewarePipe; use Psr\Http\Message\{ResponseInterface, ServerRequestInterface}; use Psr\Http\Server\RequestHandlerInterface; use Swoole\Http\{RequestCallback, Server}; use function Laminas\Stratigility\middleware; $app = new MiddlewarePipe(); $app->pipe(middleware(static function (ServerRequestInterface $request, RequestHandlerInterface $next): ResponseInterface { $user = $request->getQueryParams()['user'] ?? null; if ($user === null) { return new JsonResponse(['error' => true, 'message' => 'Unauthorized'], 401); } return $next ->handle($request->withAttribute('user', $user)) ->withAddedHeader('X-Foo', 'Bar'); })); $app->pipe(middleware(static function (ServerRequestInterface $request, RequestHandlerInterface $next): ResponseInterface { return new JsonResponse(['message' => sprintf('Hello, %s!', $request->getAttribute('user'))]); })); $server = new Server('0.0.0.0', 9501); $server->on('request', new RequestCallback($app)); $server->start();