SHOEISHA iD

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

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

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

さまざまなHTTPメソッドに対応した、Slimルーティングの登録方法を知ろう

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

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

ルーティングの外部ファイル化

 ここまでの解説で疑問に思った方もいるかもしれませんが、これらのルーティングをindex.phpに記述していくと、index.phpがどんどん肥大化していき、可読性が下がります。そこで、通常は、ルーティングの登録のみを記述した外部ファイルを作成し、index.phpではそのファイルを読み込むようにします。ここまで作成してきたindex.phpをそのように改造しましょう。

 まず、ルーティング登録を記述した部分と、ServerRequestInterfaceとResponseInterfaceのuse文を丸々移動させたリスト6のroutes.phpをsrcフォルダ直下に作成しましょう。

[リスト6]firstslim/src/routes.php
<?php
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;

$app->get("/hello",
〜省略〜
		print("<h1>IDが{$id}の詳細です!</h1>");
	}
);

 それに伴い、index.phpはリスト7のように改変します。改変部分は太字の部分です。

[リスト7]firstslim/src/public/index.php
<?php
use Slim\App as App;

require_once("../vendor/autoload.php");

$app = new App();
require_once("../routes.php");  // (1)
$app->run();

 この状態で、ここまで登録したルーティングパターンのURLでアクセスしなおしてみてください。問題なく動作することが確認できます。

 ここで行った改造のように、$app->get(…)などのルーティング登録記述を別ファイルとしてまとめ、リスト7の(1)のようにindex.phpではそのファイルをrequire_once()することで、ソースコードの可読性がよくなります。

 その際、ルーティング情報が記述されたファイルをpublicフォルダではなく、もう一階層上のsrcフォルダに作成するところがポイントです。こうすることで、外部からルーティングファイルが直接読まれなくなります(ただし、そのためには前回のNoteで触れたようにpublicフォルダをドキュメントルートとする必要があります)。なお、use文も必要なものをそれぞれのファイルに記述します。でないとエラーとなるので注意してください。

 さらに、この応用として、ルーティングファイルそのものを分割することも可能です。例えば、管理者用処理のルーティング情報を記述したadminRoutes.phpファイル、会員用処理のルーティング情報を記述したmemberRoutes.phpファイルと、ルーティングファイルを分割したいとします。

 その場合、srcフォルダ内にroutesフォルダを作成し、その中にadminRoutes.phpファイルとmemberRoutes.phpファイルを配置します。index.phpでは、これらのファイルを全てrequire_once()すれば、問題なく動作します。

ルーティンググループ

 さらに、ルーティング登録を効率よく行う方法として、ルーティンググループがあります。例えば、以下のURLがあるとします。

  • http://localhost/firstslim/src/public/members/showList
  • http://localhost/firstslim/src/public/members/entry
  • http://localhost/firstslim/src/public/members/showDetail

 これらのURLのルーティングパターンは全て最初に「/members」がついています。ルーティングパターンを設計する際、機能ごとに共通したパス(ここでは会員管理を表すようなmembers)から始まることが多いです。その場合、例えば、以下のように記述することも可能です。

$app->any("/members/showList", …);
$app->any("/members/entry", …);
$app->any("/members/showDetail", …);

 一方、これらをグループとしてまとめることができます。その場合は、Appクラスのgroup()メソッドを使って、以下の記述となります。

$app->group("/members", function(App $app): void {
	$app->any("/showList", …);
	$app->any("/entry", …);
	$app->any("/showDetail", …);
});

まとめ

 今回は、Slimの一番核となる機能、ルーティングの登録方法について、さまざまなパターンを紹介しました。ここまで紹介してきたサンプルでは、その処理結果として表示される画面は簡易なものでした。実際のアプリ開発ではもっと複雑なHTMLの表示が求められます。次回は、SlimでHTML画面をちゃんと表示させる方法を紹介します。

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

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

もっと読む

この記事の著者

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

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/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編 」他、著書多数

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング