PSR-7

PSR7 HTTP message interface1を使ってサーバーサイドリクエストの情報を取得したり、BEAR.SundayアプリケーションをPSR7ミドルウエアとして実行する事ができます。

HTTPリクエスト

PHPには$_SERVER$_COOKIEなどのスーパーグローバルがありますが、 それらの代わりにPSR7 HTTP message interfaceを使ってサーバーサイドリクエストの情報($_COOKIE, $_GET, $_POST, $_FILES, $_SERVER)を受け取ることができます。

ServerRequest (サーバーリクエスト全般)

class Index extends ResourceObject
{
    public function __construct(ServerRequestInterface $serverRequest)
    {
        // retrieve cookies
        $cookie = $serverRequest->getCookieParams(); // $_COOKIE
    }
}

アップロードファイル


use Psr\Http\Message\UploadedFileInterface;
use Ray\HttpMessage\Annotation\UploadFiles;

class Index extends ResourceObject
{
    /**
     * @UploadFiles
     */
    public function __construct(array $files)
    {
        // retrieve file name
        $file = $files['my-form']['details']['avatar'][0]
        /* @var UploadedFileInterface $file */
        $name = $file->getClientFilename(); // my-avatar3.png
    }
}

URI


use Psr\Http\Message\UriInterface;

class Index extends ResourceObject
{
    public function __construct(UriInterface $uri)
    {
        // retrieve host name
        $host = $uri->getHost();
    }
}

PSR7ミドルウエア

既存のBEAR.Sundayアプリケーションは特別な変更無しにPSR-7ミドルウエアとして動作させることができます。

以下のコマンドでbear/middlewareを追加して、ミドルウエアとして動作させるためのbootstrapスクリプトに置き換えます。

composer require bear/middleware
cp vendor/bear/middleware/bootstrap/bootstrap.php bootstrap/bootstrap.php

次にスクリプトの__PACKAGE__\__VENDOR__をアプリケーションの名前に変更すれば完了です。

php -S 127.0.0.1:8080 -t public

ストリーム

ミドルウエアに対応したBEAR.Sundayのリソースはストリームの出力に対応しています。

HTTP出力はStreamTransferが標準です。詳しくはストリーム出力をご覧ください。

新規プロジェクト

新規でPSR-7のプロジェクトを始めることもできます。

composer create-project bear/project my-awesome-project
cd my-awesome-project/
php -S 127.0.0.1:8080 -t public

PSR-7ミドルウエア