mbarquin/reactphp-slim

Slim 请求和响应扩展,以允许 reactPHP 提供一个 Slim 框架实例

v0.4.3 2016-11-09 10:26 UTC

This package is not auto-updated.

Last update: 2024-09-27 03:39:45 UTC


README

介绍

创建此库是为了使用 reactPHP 作为 Slim 框架的 HTTP 服务器。当有请求时,它会启动一个 Slim\App 进程,同时将 reactPHP 原生对象中的数据传输到 Slim 对象中。通过这种方式,我们可以为 Slim 框架应用创建一个基本的 react 服务器。

react 和 Slim 对象之间传输数据、cookie 和文件上传。您可以通过 slim 原生函数访问上传的文件、数据和 cookie。

## 安装 您可以通过以下方式安装此组件

## 使用 在完成 composer 自动加载要求后,应按常规实例化并准备 Slim\App。您可以将 Slim\App 启动并注入所有依赖项,之后,应实例化 reactphp-slim 服务器并调用其 run 方法,使用 slim\App 作为参数。reactphp-slim 服务器将作为中介并将在有请求时通过 process 方法启动 slim 应用程序,该方法避免了 Slim 常规的请求和响应启动。

当上传文件时,move_uploaded_files() 可能不会工作,请使用原生对象方法移动文件。

require '../vendor/autoload.php';

use \mbarquin\reactSlim;

// We keep a new Slim app instance.
$app = new \Slim\App();

// We add a closure to attend defined request routes
$app->any('/hello/{name}', function (
        \Slim\Http\Request $request,
        \Slim\Http\Response $response) {

        $name = $request->getAttribute('name');

        $response->getBody()->write("Hello, $name");
        $response->getBody()->write(print_r($request->getParsedBody(), true));
        $response->getBody()->write(print_r($request->getCookieParams(), true));
        $response->getBody()->write(print_r($request->getHeaders(), true));
        // $response->getBody()->write(print_r($request->getUploadedFiles(), true));

        return $response;
    });

$server = new \mbarquin\reactSlim\Server();

$server->withHost('192.168.67.1')->withPort(1337)->run($app);

\mbarquin\reactSlim\Server 对象是配置和启动 ReactPHP 服务器的类。它有两个主要方法

withHost($string) 设置要监听的 IP 地址

withPort($int) 设置服务器将监听的端口,默认设置为 1337。

run(\Slim\App $app) 启动服务器进程并等待有请求时启动作为参数传递的 \Slim\App。

v0.4.2 设置

这是运行 reactPHP 服务器与 slimPHP 应用程序的旧设置

require '../vendor/autoload.php';

use mbarquin\reactSlim;

// We keep a new Slim app instance.
$app = new \Slim\App();

// We add a closure to listen defined request routes
$app->get('/hello/{name}', function (
        \mbarquin\reactSlim\Request $request,
        \mbarquin\reactSlim\Response $response) {

        $name = $request->getAttribute('name');
        $response->getBody()->write("Hello, $name");

        return $response;
    });

// We create a closure to be attached to server request event.
$serverCallback = function (
       \React\Http\Request $request,
       \React\Http\Response $response) use ($app){

    $slRequest  = \mbarquin\reactSlim\Request::createFromReactRequest($request);
    $slResponse = new \mbarquin\reactSlim\Response();

    $app->process($slRequest, $slResponse);

    $slResponse->setReactResponse($response, true);
};

// We make the setup of the ReactPHP
$loop   = React\EventLoop\Factory::create();
$socket = new React\Socket\Server($loop);
$http   = new React\Http\Server($socket, $loop);

// Ligamos la closure al evento request.
$http->on('request', $serverCallback);

echo "Server running at http://127.0.0.1:1337\n";

$socket->listen(1337);
$loop->run();