CodeZine(コードジン)

特集ページ一覧

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

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2019/03/11 11:00
目次

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

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



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

バックナンバー

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

もっと読む

著者プロフィール

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

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

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

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5