PSR-7
PSR-7 HTTP message interface1を使って、サーバーサイドリクエストの情報を取得したり、BEAR.SundayアプリケーションをPSR-7ミドルウェアとして実行したりすることができます。
HTTPリクエスト
PHPには$_SERVER
や$_COOKIE
などのスーパーグローバルがありますが、それらの代わりにPSR-7 HTTP message interfaceを使ってサーバーサイドリクエストの情報($_COOKIE
、$_GET
、$_POST
、$_FILES
、$_SERVER
)を受け取ることができます。
ServerRequest(サーバーリクエスト全般)
class Index extends ResourceObject
{
public function __construct(ServerRequestInterface $serverRequest)
{
// クッキーの取得
$cookie = $serverRequest->getCookieParams(); // $_COOKIE
}
}
アップロードファイル
use Psr\Http\Message\UploadedFileInterface;
use Ray\HttpMessage\Annotation\UploadFiles;
class Index extends ResourceObject
{
/**
* @UploadFiles
*/
public function __construct(array $files)
{
// ファイル名の取得
$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)
{
// ホスト名の取得
$host = $uri->getHost();
}
}
PSR-7ミドルウェア
既存の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