Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。3ルーティングの外部ファイル化ルーティンググループまとめ複数のHTTPメソッドに対応できるルーティング登録ルーティング登録用のAppクラスのメソッドには、複数のHTTPメソッドに対応したものが2個あります。次にそれを紹介します。全てのメソッドに対応したany()1つ目は、どのHTTPメソッドでも処理を行うルーティングを登録するany()メソッドです。引数はget()やpost()と同じです。実際にany()を使った処理をindex.phpに追記してみましょう。追記するのは、リスト3の太字の部分です。(2)print("<h1>{$method}でメソッドでこんにちは!</h1>");});$app->run();リスト3の(1)で、$appのany()メソッドを使ってルーティングを登録しています。ルーティングパターンは「/helloAny」ですので、この処理を呼び出すURLはhttp://localhost/firstslim/src/public/helloAnyです。前節のNoteで紹介したPostmanを使ってDELETEメソッドでアクセスした結果が図4です。図4:「/helloAny」にPostmanを使ってアクセスした結果画面DELETEメソッドでアクセスしてもちゃんと処理が行われています。アクセスしてきたHTTPメソッドも表示させています。これを可能にしているのが、リスト3の(2)です。前回紹介したように、ルーティング登録のコールバック関数の第1引数である$requestは、Psr\Http\Message\ServerRequestInterfaceインスタンスであり、このメソッドgetMethod()を使うとアクセスしてきたHTTPメソッドを取得できます。他のHTTPメソッドでアクセスしても同様の処理が可能となっています。アクセスするHTTPメソッドを選べるmap()2つ目は、HTTPメソッドを選択できるmap()メソッドです。map()メソッドは引数が1個増え、以下の構文となります。対応するコールバック関数);サンプルを作成してみましょう。index.phpにリスト4の太字の部分を追記してください。void{print("<h1>POSTまたはGETメソッドでこんにちは!</h1>");});$app->run();リスト4の(1)で、$appのmap()メソッドを使ってルーティングを登録しています。ルーティングパターンは「/helloMap」ですが、この記述が第2引数となっています。"GET"]と、HTTPメソッドを文字列として列挙した配列を記述しています。ここに記述されたメソッドのみ処理されるようになります。試しに、この処理を呼び出すURLであるhttp://localhost/firstslim/src/public/helloMapにブラウザでアクセスすると、図5の画面が表示され、無事処理が行われています。Postmanを使ってPOSTとGET以外のメソッドでアクセスした結果が図6です。処理が許可されていないことがわかります。ルーティングプレースホルダルーティングの登録方法を一通り紹介したところで、次にURLにパラメータを埋め込む方法を紹介します。何かの商品の詳細情報を表示する画面を表す以下のURLがあるとします。http://localhost/firstslim/src/public/showDetail/35このURLでは「/showDetail/35」がルーティングパターンとなりますが、このうち、「/showDetail」が詳細画面を表示する処理を表し、「/35」は商品のIDを表すとします。このURLに対応する処理では、商品IDを表す35というパラメータを使って詳細情報を取得、表示するような処理になります。このように、URL中にIDなどのパラメータを含めたいことが多々あります。Slimのルーティング処理ではこのURL中のパラメータをサポートしており、プレースホルダという記述方法をとります。それは、以下の構文のように「/{...}」と波括弧を使います。[構文]プレースホルダを使ったルーティングパターン/.../{プレースホルダ名}サンプルで見てみましょう。index.phpにリスト5の太字の部分を追記してください。(2)print("<h1>IDが{$id}の詳細です!</h1>");});$app->run();追記が終了したら、上記URLでアクセスしてください。図7の画面が表示されれば成功です。図7:プレースホルダを使った処理の結果画面リスト5の(1)の「/{id}」の部分がプレースホルダを使った記述であり、「id」がプレースホルダ名です。いった記述のルーティングパターンの場合、SlimはURL中の「/{...}」にあたる部分をパラメータとして扱い、コールバック関数の第3引数である配列$argsにURL中の値を自動的に格納してくれます。配列のキーはまさにプレースホルダ名であり、コールバック関数中ではリスト5の(2)のようにプレースホルダ名を指定することでURL中のパラメータを取り出すことができます。プレースホルダは複数記述できるこれらのプレースホルダはいくつでも使うことができます。以下のようなルーティングパターンです。/showList/{categoryId}/{tagId}/{listSize}この場合は、$args["categoryId"]、$args["tagId"]、$args["listSize"]でそれぞれのパラメータを取得できます。URLとして、http://localhost/firstslim/src/public/showList/drink/low/50でアクセスしてきたとしたら、それぞれのパラメータの値は以下のようになります。$args["categoryId"]→drink$args["tagId"]→low$args["listSize"]→50オプションプレースホルダさらに、パラメータをオプション扱いにすることもできます。上記URLのうち、listSizeをオプションとし、省略可能だとします。URLの例としては、以下のものが考えられます。http://localhost/firstslim/src/public/showList/food/highこのように、省略可能なプレースホルダを記述する場合は「[/{...}]」と角括弧で囲みます。listSizeを省略可能にするルーティングパターンは以下のようになります。/showList/{categoryId}/{tagId}[/{listSize}]ここで、上記のように「/」から角括弧で囲む点に注意してください。複数のプレースホルダをオプションとする場合さらに、tagIdとlistSizeをオプションとし、省略可能にしたいとします。URLの例としては、前項のものに加えて以下のものが考えられます。http://localhost/firstslim/src/public/showList/sideこれは、tagIdとlistSizeの両方が省略されたURLです。この場合は、「/{...}」と角括弧を入れ子(ネスト)にします。上記のようにtagIdとlistSizeを省略可能にするルーティングパターンは以下のようになります。