PHPixieとPSR-7を使用した最新のHTTPアプローチ

画像

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で見つけることができます



All Articles