SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

軽量PHPフレームワークSlimを習得しよう

SlimとテンプレートエンジンTwigを連携させてみよう

軽量PHPフレームワークSlimを習得しよう 第4回

  • このエントリーをはてなブックマークに追加

 本連載では軽量PHPフレームワークであるSlimを紹介していきます。フレームワークといえば、重厚長大なもの、いわゆるフルスタックフレームワークが多い中で、あえて軽量フレームワークを取り上げます。軽量ゆえのメリットを味わっていただこうと思います。前回は、さまざまなルーティング登録の方法を紹介しました。今回は、もっとちゃんとしたHTML画面をSlimで表示させるにはどうすればいいのかを扱います。それは、テンプレートエンジンTwigと連携させることによって実現するので、その方法とTwigの使い方を紹介していきます。

  • このエントリーをはてなブックマークに追加

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は、今回新たに作成するルーティング登録用ファイルです。

[リスト1]firstslim/src/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レスポンスとして送信されます。構文としては以下のようになります。

[構文]JSONデータの送信
ルーティングコールバック関数
function(Request $request, Response $response, array $args): Response
{
	JSONデータの元となるPHP連想配列を生成。
	return $response->withJson(生成されたPHP連想配列);
}

 では、実際にリスト1を動作させてみましょう。index.phpに、リスト1のファイルを読み込むコードとしてリスト2の太字の1行を追記します。

[リスト2]firstslim/src/public/index.php
<?php
〜省略〜
require_once("../routes4.php");
$app->run();

 この辺りは、前回の復習です。

 コードが記述できたら、以下のURLにアクセスしてください。

  • http://localhost/firstslim/src/public/no4/getDataByJSON/54

 図1の画面が表示されれば成功です。

図1:リストXXの処理結果として表示されたJSON
図1:リスト2の処理結果として表示されたJSON

[Note]ChromeのJSON整形用プラグイン

 図1では整形された状態でJSONデータがブラウザに表示されています。これは、ChromeのプラグインであるJSON Formatterを使って整形表示させているからです。このようなプラグインをインストールしていない場合は、以下の表示になります。

{"id":"54","name":"\u7530\u4e2d\u548c\u5f66","age":26}

 JSONデータを確認するには、このようなプラグインは必須です。もちろん、前回のNoteで紹介したPostmanを利用するのも一手です。その場合は、JSONデータは自動で整形表示してくれます。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
テンプレートエンジンTwigと連携させてみる

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
軽量PHPフレームワークSlimを習得しよう連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook<個人紹介>WINGSプロジェクト所属のテクニカルライター。Web系製作会社のシステム部門、SI会社を経てフリーランスとして独立。屋号はSarva(サルヴァ)。HAL大阪の非常勤講師を兼務。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11495 2019/04/24 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング