開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. PHP >
  4. RoadRunner上でSlimを動かす

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

TOPに戻る