ilexn/swoole-convert-psr7

将swoole转换为psr7请求/响应

资助包维护!
iLexN

0.6.1 2022-05-04 06:25 UTC

README

Latest Stable Version Total Downloads

CI Check Coverage Status

使用任何PSR 17工厂将响应/请求转换为PSR 7。

注意:目前尚未用于生产。仅用于学习。

从0.5.0版本开始,CI测试也包括swoole和openswoole

安装

通过Composer

$ composer require ilexn/swoole-convert-psr7

从旧包升级

删除旧包

$ composer remove ilexn/swoole-convent-psr7

安装新包

$ composer require ilexn/swoole-convert-psr7

使用相同命名空间的两个包,无需更改其他代码。

使用方法

Slim 4Nyholm/psr7为例。

<?php
declare(strict_types=1);

use Nyholm\Psr7\Factory\Psr17Factory;
use Psr\Http\Message\ResponseInterface;
use Swoole\Http\Response;
use Swoole\Http\Request;

include 'vendor/autoload.php';

$http = new swoole_http_server('0.0.0.0', 9501);
$psr17Factory = new Psr17Factory();


$serverRequestFactory = new \Ilex\SwoolePsr7\SwooleServerRequestConverter(
    $psr17Factory,
    $psr17Factory,
    $psr17Factory,
    $psr17Factory
);

$app = new Slim\App($psr17Factory);
$app->get('/hello/{name}', function ($request, ResponseInterface $response, $args) {
    //dump($args);
    $response->getBody()->write("Hello, " . $args['name']);
    return $response->withHeader('X-Powered-By','ilexn');
});

$http->on('start', function ($server) {
    echo "Swoole http server is started at http://127.0.0.1:9501\n";
});

$http->on('request',
    function (Request $request, Response $response) use ($serverRequestFactory , $app
    ) {
        $psr7Request = $serverRequestFactory->createFromSwoole($request);
        $psr7Response = $app->handle($psr7Request);
        $converter = new \Ilex\SwoolePsr7\SwooleResponseConverter($response);
        $converter->send($psr7Response);
    });

$http->start();

参考