ルーティングの外部ファイル化
ここまでの解説で疑問に思った方もいるかもしれませんが、これらのルーティングをindex.phpに記述していくと、index.phpがどんどん肥大化していき、可読性が下がります。そこで、通常は、ルーティングの登録のみを記述した外部ファイルを作成し、index.phpではそのファイルを読み込むようにします。ここまで作成してきたindex.phpをそのように改造しましょう。
まず、ルーティング登録を記述した部分と、ServerRequestInterfaceとResponseInterfaceのuse文を丸々移動させたリスト6のroutes.phpをsrcフォルダ直下に作成しましょう。
<?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のように改変します。改変部分は太字の部分です。
<?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画面をちゃんと表示させる方法を紹介します。
