Skip to content

Instantly share code, notes, and snippets.

@nilportugues
Last active December 8, 2018 18:33
Show Gist options
  • Save nilportugues/a6c1c7ccde7fa840925a to your computer and use it in GitHub Desktop.
Save nilportugues/a6c1c7ccde7fa840925a to your computer and use it in GitHub Desktop.
React+Lumen
<?php
// bootstrap/react.php
// Remember, we need to do first: composer require react/react!
$app = include('app.php');
$host = 'localhost';
$port = 9000;
$reactApp = function (\React\Http\Request $request, \React\Http\Response $response) use ($app, $host, $port) {
$mapRequest = function(\React\Http\Request $request, $content)
{
$method = $request->getMethod();
$headers = $request->getHeaders();
$post = array();
if (isset($headers['Content-Type']) && (0 === strpos($headers['Content-Type'], 'application/x-www-form-urlencoded'))
&& in_array(strtoupper($method), array('POST', 'PUT', 'DELETE', 'PATCH'))
) {
parse_str($content, $post);
}
$sf2Request = new Illuminate\Http\Request($request->getQuery(), $post, array(), array(), array(), array(), $content);
$sf2Request->setMethod($method);
$sf2Request->headers->replace($headers);
$sf2Request->server->set('REQUEST_URI', $request->getPath());
$sf2Request->server->set('SERVER_NAME', explode(':', $headers['Host'])[0]);
return $sf2Request;
};
$mapResponse = function (React\Http\Response $response, Symfony\Component\HttpFoundation\Response $sf2Response)
{
$headers = $sf2Response->headers->all();
$response->writeHead($sf2Response->getStatusCode(), $headers);
if ($sf2Response instanceof Symfony\Component\HttpFoundation\StreamedResponse) {
ob_start();
$sf2Response->sendContent();
$content = ob_get_contents();
ob_end_clean();
}
else {
$content = $sf2Response->getContent();
}
$response->end($content);
};
$mapResponse($response, $app->dispatch($mapRequest($request, null)));
};
$loop = React\EventLoop\Factory::create();
$socket = new React\Socket\Server($loop);
$http = new React\Http\Server($socket);
$http->on('request', $reactApp);
$socket->listen($port);
$loop->run();
@nilportugues
Copy link
Author

@AndrewCarterUK great stuff there. Why don't you add this script to your project? :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment