mbarquin / reactphp-slim
Slim 请求和响应扩展,以允许 reactPHP 提供一个 Slim 框架实例
Requires
- php: ^7.0
- react/http: 0.3.*
- slim/slim: ^3.1
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。
## 安装 您可以通过以下方式安装此组件
- 使用官方 Github 仓库 (https://github.com/mbarquin/reactphp-slim.git)
- 使用 composer : composer require mbarquin/reactphp-slim --dev
## 使用 在完成 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();