RoadRunner上でSlimを動かす
こんにちは、ナカエです。
前回の記事 に引き続きRoadRunnerの記事です。
今回はPSR-7対応のSlimフレームワークをRoadRunnerと組み合わせて動かします。
Workerの設定
PHPのエントリポイントとなるworker.phpは下記のようになります。
<?php
declare(strict_types=1);
ini_set('display_errors', 'stderr');
require 'vendor/autoload.php';
$container = new \Slim\Container();
$app = new Slim\App($container);
$app->get('/hello/{name}', function ($request, $response, $args) {
$response->getBody()->write('Hello, ' . $args['name']);
return $response;
});
$relay = new Spiral\Goridge\StreamRelay(STDIN, STDOUT);
$psr7 = new Spiral\RoadRunner\PSR7Client(new Spiral\RoadRunner\Worker($relay));
while ($request = $psr7->acceptRequest()) {
try {
$container['request'] = $request;
$container['response'] = new \Zend\Diactoros\Response();
$response = $app->run(true);
$psr7->respond($response);
} catch (\Throwable $e) {
$psr7->getWorker()->error((string)$e);
}
}
最初にルーティングやコンテナなどSlimを初期化しています。 そのあとはループの中でRoadRunnerからRequestを受け取り、SlimにRequestを処理させResponseを生成、再びRoadRunnerに渡すというサイクルを回すだけです。
ポイントはアプリケーションオブジェクトを使い回せる利点を生かすため、RequestとResponseをリクエストごとにコンテナにセットし直してしている点くらいでしょうか。
思いのほか簡単にできました。PSR-7という共通のインターフェースがあるのはやはり便利ですね。
ソース
全体のコードは前回と同じリポジトリのslimphpブランチに置いています。
n1215/roadrunner-docker-skeleton at slimphp