Skip to content

Instantly share code, notes, and snippets.

@lotharthesavior
Last active April 4, 2022 00:54
Show Gist options
  • Save lotharthesavior/063d68972ed41be743e7fe7ef347ba84 to your computer and use it in GitHub Desktop.
Save lotharthesavior/063d68972ed41be743e7fe7ef347ba84 to your computer and use it in GitHub Desktop.
Swoole Http Server with templating and routing
{
"require": {
"league/plates": "^3.4",
"slim/slim": "4.*",
"ilexn/swoole-convert-psr7": "^0.6.0",
"nyholm/psr7": "^1.5"
}
}
<?php
require __DIR__ . '/vendor/autoload.php';
use Ilex\SwoolePsr7\SwooleResponseConverter;
use Ilex\SwoolePsr7\SwooleServerRequestConverter;
use Nyholm\Psr7\Factory\Psr17Factory;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Slim\App;
use Swoole\Http\Request;
use Swoole\Http\Response;
use Swoole\Http\Server;
$psr17Factory = new Psr17Factory;
$requestConverter = new SwooleServerRequestConverter(
$psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory
);
$app = new App($psr17Factory);
$app->addRoutingMiddleware();
$app->get('/', function(RequestInterface $request, ResponseInterface $response, $args){
$templates = new League\Plates\Engine(__DIR__ . '/');
$response->getBody()->write($templates->render('view1', ['name' => 'Something else!']));
return $response;
});
$server = new Server("0.0.0.0", 8080);
$server->on("start", function(Server $server) {
echo "HTTP Server ready at http://127.0.0.1:8080" . PHP_EOL;
});
$server->on('request', function(Request $request, Response $response) use ($app, $requestConverter) {
$psr7Request = $requestConverter->createFromSwoole($request);
$psr7Response = $app->handle($psr7Request);
$converter = new SwooleResponseConverter($response);
$converter->send($psr7Response);
});
$server->start();
<html>
<head><title>Test Page</title></head>
<link rel="icon" href="data:,"><!-- This avoids errors for favicon requests -->
<body>
<h1>Hello <?php echo $name; ?></h1>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment