ルーティングの外部ファイル化
ここまでの解説で疑問に思った方もいるかもしれませんが、これらのルーティングを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画面をちゃんと表示させる方法を紹介します。