トップページ > 1. ドキュメント > 1.2. CharcoalPHPの基本 > 1.2.2. コアコンポーネント(基本) > ルーター(>=2.8.5.82)

ルーター(>=2.8.5.82)

ルータとは

 通常、CharcoalPHPのURLは「/?proc=@:aaa:bbb&p1=1&p2=2」のような形式となりますが、ルーターを使うことでフレームワークが「/aaa/bbb/1/2」のような短い形式でURLを解釈できるようになります。 このような機能を「ルーティング機能」といい、ルーティング機能を用いることで、静的なURL(パーマリンク)を実現することができます。

 CharcoalPHPでルーティング機能を実装するには、次に説明する「ルータオブジェクト」および「ルーティングルールオブジェクト」を最低1つ以上実装する必要があります。

ルータオブジェクト

 ルータオブジェクトはフレームワークからプロシージャパスを受け取り、フレームワークに対して与えられたパスをどのURL(およびパラメータ)にマップすべきかを通知します。 ルータオブジェクトは後述する「ルーティングルールオブジェクト」を使って設定ファイル等からルーティング情報を読み取り、実際のURLマッピングを行います。

 ルータオブジェクトはCharcoal_IRouterインタフェースを実装する必要があり、フレームワークまたはweb_appパス上の「classes/routers」にクラスファイルを配置する必要があります。

ルーティングルールオブジェクト

 ルーティングルールオブジェクトはルーティング情報(URLに対応するプロシージャパスとパラメータ)を保持するオブジェクトです。ルーティング情報は単純なKey-Value型のデータ構造をしており、URLパターンを渡すとプロシージャパスを返すようなものであれば何でも構いません。最も単純なルーティングルールオブジェクトはフレームワーク同梱のCharcoal_ArrayRoutingRuleで、このクラスは設定ファイルからルーティング情報を読み込みます。

 ルーティングルールオブジェクトを独自に実装する場合はCharcoal_IRoutingRuleインタフェースをimplementする必要があります。

Charcoal_ArrayRoutingRuleの読み込むルーティング情報設定ファイルの書式

 Charcoal_ArrayRoutingRuleが読み込むルーティング情報設定ファイルは以下のような書式になります。

 1行目は、「/aaa/bbb」というURLを「@:aaa:bbb」というプロシージャにマップする単純なマッピング例です。この場合、引数(パラメータ)マッピングは行われないため、URLに引数を付与したい場合は「/aaa/bbb/&param1=3」のような記述をする必要があります。

 これに対し2行目は「ccc/ddd/」というURLを「@ccc:ddd」というプロシージャにマッピングするのに加え、もし「ccc/ddd/yellow/stone」というURLでアクセスされた場合には「category」という名前のリクエストパラメータにyellowという値、「post_name」というリクエストパラメータにstoneという値をそれぞれセットした上でプロシージャ「@ccc:ddd」を呼び出します。つまり、「/?proc=@ccc:ddd&category=yellow&post_name=stone」というURLでアクセスしたのと同じ結果となります。

 このように、任意のURLから引数を取り出し、リクエストパラメータに引き渡す仕組みを「引数マッピングパラメータ・マッピング)」といいます。

Pocket

Comments are closed.