HTTPリクエストを処理するための標準のPHP APIは古くなっています。 プログラマーはグローバル変数を使用しないことを学びましたが、$ _GET、$ _SERVERなどの標準的なスーパーグローバルは、遠い過去を思い出させます。 もちろん、フレームワークはこの情報をRequest \ Responseクラスにカプセル化しますが、そのような実装は多くあり、単一の標準はまだありません。 PHP-FIGのPSR-7標準は、HTTPプロトコルの表現を単一の分母に持ってくるだけで、多くのフレームワークですぐに動作するミドルウェアを作成できます。 まだ採用されていませんが、早期投票により、新基準に対するほぼ全員の支持が示されました。 バージョン3.0のリリースに備えて、PHPixieはすでにPSR-7を採用および実装しており、インターフェイスの作業を簡素化するためのラッパーも提供しています。 マイクロフレームワークを作成し、PHPixie HTTPをベースとして使用する場合、1晩で結果を達成できます。
次に、実装自体を見てみましょう。
$slice = new \PHPixie\Slice(); $http = new \PHPixie\HTTP($slice);
リクエスト
PSR-7はかなり単純化されたインターフェイスであり、PHP自体と同様に配列の形式で$ _GETおよび$ _POSTパラメーターを提供します。PHPixieラッパーは、それらの操作を大幅に簡素化します。
// $request = $http->request(); // // PSR-7 ServerRequestInterface $request = $http->request($serverRequest); //$_GET $query = $request->query(); //$_POST $query = $request->data(); // // $query = $request->attributes(); //$_GET['pixie'] $query->get('pixie'); // $query->get('pixie', 'Trixie'); // $query->getRequired('pixie'); //$_GET['user']['name']; $query->get('user.name'); // $userData = $query->slice('user'); $userData->get('name'); // $userData // \PHPixie\Slice\Data // HTTP // - // $request->server()->get('http_host'); // $request->headers()->get('host'); $request->headers()->getRequired('host'); // $request->headers()->getLines('accept'); // PSR-7 $uploadedFile = $request->uploads()->get('file'); $uploadedFile->move('/images/fairy.png'); // URI $uri = $request->uri(); $path = $uri->getPath(); // - // ServerRequestInterface $serverRequest = $request->serverRequest();
応答
HTTP応答に対するラッパー自体に加えて、PHPixieは頻繁に使用される回答を自動的に作成して、ヘッダーに煩わされることを防ぎます。 もちろん、答えが構築された後、好みに合わせて修正することができます。
$responses = $http->responses(); // $response = $responses->string('hello world'); //JSON $responses->json(array('name' => 'Pixie')); // $responses->redirect('http://phpixie.com/'); // $responses->streamFile('pixie.png'); // // CSV, TXT $responses->download('name.txt', 'text/plain', 'Trixie'); // $responses->downloadFile('pixie.png', 'image.png', 'images/fairy.png'); // $response->setStatus('404', 'Not Found'); // $response->setStatus('404'); // $response->headers->set('Content-Type', 'text/csv'); // PSR-7 ResponseInterface $response->asResponseMessage(); // $http->output($response);
コンテキスト
これですべてですが、Cookieとセッションはスキップしました。 これらは要求と応答の両方に適用され、多くの場合、コントローラー内だけでなく、承認モジュールなどの他の場所でもアクセスする必要があります。 PHPixieは、それらを個別のコンテキストに割り当てます。
// $context = $http->context($request); // $cookies = $context->cookies(); $session = $context->session(); $cookies->set('lang', 'en'); $session->getRequired('user_id'); // // $http->output($response, $context); $response->asResponseMessage($context);
他のPSR-7実装もありますが、これまでのところ、ラッパーやコンテキストがないため、それらを使用するのは非常に不便です。 それらのかなりの数が特性を使用しているため、PHP 5.4+が必要です。
その時点で、すべてのPHPixieライブラリは5.3より古いバージョンのPHP(新しい7とHHVMを含む)で動作し、さらにユニットテストで100%カバーされています。 コード自体はgithub.com/phpixie/httpで見つけることができます