Slimにおけるビューの扱い
LaravelやCakePHPといったフルスタックフレームワークは、MVCの考え方を取り入れています。ですので、MVCのV、つまり、ビュー層の機能を内包しています。一方、Slimはルーティングに重点を置いた軽量フレームワークなので、ビュー層は含まれていません。Slimの公式ドキュメントには以下の記述があります。
Slim's "view" is the HTTP response.
Slimでは、適切なPSR7のResponseオブジェクトを生成し、リターンすることにのみ責任を持つように作られています。
このことは、HTTPのレスポンスとして必ずHTMLを返さなければならない、といった束縛から自由になることを意味し、さまざまなWebアプリケーションの形態に柔軟に対応できるフレームワークであることを示しています。
SlimでJSONデータを送信する方法
Slimのレスポンスの柔軟さを表す一例を紹介しましょう。
例えば、Webアプリケーションのフロントエンドをシングルページアプリケーションとし、そのサーバサイドを全てAPI化したものを考えます。その場合のサーバサイドとしては、JSONオブジェクトをHTTPレスポンスとして送信するのが通常です。Slimはそういったアプリケーションにも対応しています。
例えば、リスト1のコードになります。リスト1を記述するroutes4.phpは、今回新たに作成するルーティング登録用ファイルです。
<?php use Psr\Http\Message\ServerRequestInterface as Request; use Psr\Http\Message\ResponseInterface as Response; use Slim\App as App; $app->any("/no4/getDataByJSON/{id}", function(Request $request, Response $response, array $args): Response { $id = $args["id"]; // (1) $jsonArray =["id" => $id, "name" => "田中和彦", "age" => 26]; // (2) return $response->withJson($jsonArray); // (3) } );
リスト1のポイントは(3)の行です。ルーティングコールバック関数の第2引数はPSR7のResponseオブジェクトです。このResponseオブジェクトのwithJson()メソッドを実行することでJSONデータを内包したResponseオブジェクトを生成します。その際、引数として、JSONデータの元となる連想配列を渡します。リスト1では$jsonArrayが該当し、その$jsonArrayをあらかじめ生成しているのが(2)です。ここでは、前回の復習も兼ねてルーティングプレースホルダを使って、それを(1)で$idとして受け取り、(2)の$jsonArrayに埋め込んでいます。実際には、例えば、$idを使ってDBからデータを取得し、その結果配列をJSONデータとする、といった処理を記述します。
そうして生成されたResponseオブジェクトをルーティングコールバック関数の戻り値としてリターンすることで、JSONデータがHTTPレスポンスとして送信されます。構文としては以下のようになります。
ルーティングコールバック関数 function(Request $request, Response $response, array $args): Response { JSONデータの元となるPHP連想配列を生成。 return $response->withJson(生成されたPHP連想配列); }
では、実際にリスト1を動作させてみましょう。index.phpに、リスト1のファイルを読み込むコードとしてリスト2の太字の1行を追記します。
<?php 〜省略〜 require_once("../routes4.php"); $app->run();
この辺りは、前回の復習です。
コードが記述できたら、以下のURLにアクセスしてください。
- http://localhost/firstslim/src/public/no4/getDataByJSON/54
図1の画面が表示されれば成功です。
[Note]ChromeのJSON整形用プラグイン
図1では整形された状態でJSONデータがブラウザに表示されています。これは、ChromeのプラグインであるJSON Formatterを使って整形表示させているからです。このようなプラグインをインストールしていない場合は、以下の表示になります。
{"id":"54","name":"\u7530\u4e2d\u548c\u5f66","age":26}
JSONデータを確認するには、このようなプラグインは必須です。もちろん、前回のNoteで紹介したPostmanを利用するのも一手です。その場合は、JSONデータは自動で整形表示してくれます。