Download the PHP package volcanus/routing without Composer
On this page you can find all versions of the php package volcanus/routing. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download volcanus/routing
More information about volcanus/routing
Files in volcanus/routing
Package routing
Short Description request-URI routing for page-controller scripts.
License MIT
Homepage https://github.com/k-holy/Volcanus_Routing
Informations about the package routing
Volcanus_Routing
ページコントローラ(PageController)パターンで「きれいなURI」を実現するためのライブラリです。
フロントコントローラ(FrontController)パターンにおいてRouterと呼ばれるクラスは、 リクエストURIを解析して特定のクラスに振り分ける役目を担います。
ページコントローラパターンでの利用を想定したVolcanus_Routingでは、 リクエストURIを解析して特定のディレクトリにあるスクリプトファイルを読み込み、 カレントディレクトリを移動します。
また、パラメータディレクトリと呼ぶ特別な名前のディレクトリを設定することで、 リクエストURIのパスに含まれるパラメータを取得する機能を提供します。
対応環境
- PHP 8.1以降
依存ライブラリ
なし
簡単な使い方
以下は Apache + mod_rewrite での使用例です。
/.htaccess
なお Apache 2.2.16以上の場合は FallbackResource ディレクティブが便利です。
/.htaccess (Apache 2.2.16以上)
存在しないディレクトリまたはファイルへのリクエストがあれば、 以下のゲートウェイスクリプト(__gateway.php)に転送されます。
/__gateway.php
"/categories/1/items/2/detail.json" というリクエストURIに対して上記の設定でルーティングを行った場合、 ドキュメントルート以下の "/categories/%VAR%/items/%VAR%/detail.php" スクリプトが読み込まれ、 カレントディレクトリを移動します。
ルーティング準備処理で読み込み対象のスクリプトが発見できなかった場合は、 Volcanus\Routing\Exception\NotFoundException 例外がスローされますので、 これをキャッチしてステータス 404 を返すことができます。
ルーティング実行時には、overwriteGlobals オプションを true に設定しているため、 $_SERVERグローバル変数のうち PHP_SELF, SCRIPT_NAME, SCRIPT_FILENAME, PATH_INFO, PATH_TRANSLATED が、 ルーティング結果に従って書き換えられます。
/categories/%VAR%/items/%VAR%/detail.php
Router::instance()メソッドはSingletonとして実装されており、 読み込まれたスクリプトからルーティング結果を参照できます。
リクエストパスのうち、パラメータディレクトリ %VAR% に当たるセグメントを Router::parameter() メソッドによって取得したり、 本来のリクエストURIで指定された拡張子を Router::extension() メソッドによって取得できます。
読み込み先のスクリプトからこれらの機能を利用するためにSingleton機能を提供していますが、 コンストラクタの利用を禁止しているわけではないので、 たとえばルーティング実行後にRouterのインスタンスやparameters()メソッドの戻り値をグローバル変数や類似のオブジェクトにセットしておき、 読み込み先のスクリプトから参照するような使い方も可能です。
デリミタ指定によるパラメータの型指定
ver 0.2.0より、左右のデリミタおよび型を指定して、リクエストパスのパラメータを取得できるようになりました。
標準ではパラメータのセグメントとして alpha, digit, alnum, graph といったCtype関数の各キーワードを含むディレクトリ名を利用できます。
/__gateway.php
ドキュメントルート以下に "/users/{%digit%}/index.php" というスクリプトが存在するとして…
"/users/foo" というリクエストURIのルーティングでは、InvalidParameterException によりステータス400が返されます。
"/users/1" というリクエストURIのルーティングでは、該当スクリプトが読み込まれます。
/users/{%digit%}/index.php
デリミタ指定および独自フィルタによるパラメータの検証と変換
parameterFilters オプションを利用して独自のフィルタを定義し、 Ctype関数に拠らないパラメータの検証を行ったり、パラメータの値を変換することもできます。
/__gateway.php
ドキュメントルート以下に "/users/{%digit%}/profiles/{%profile_id%}/index.php" というスクリプトが存在するとして…
"/users/1/profiles/invalid@id" というリクエストURIのルーティングでは、InvalidParameterException によりステータス400が返されます。
"/users/1/profiles/k-holy" というリクエストURIのルーティングでは、該当スクリプトが読み込まれます。
/users/{%digit%}/profiles/{%profile_id%}/index.php
fallbackScriptオプションを指定して、スクリプトが見つからない場合に代替スクリプトを読み込む
ver 0.3.0より、スクリプトが見つからない場合にドキュメントルート以下の任意のパスに設置した代替スクリプトを読み込むための fallbackScript オプションを追加しました。
/__gateway.php
上記の設定で、たとえば存在しないパス /path/not/found がリクエストされた場合、カレントディレクトリを /path/to に移動して fallback.php を実行します。
fallbackScript オプションをファイル名で指定した場合、リクエストされたディレクトリ内にそのファイルがあれば読み込みます。
/__gateway.php
上記の設定で、たとえば存在しないパス /path/not/found がリクエストされ、/path/not/found.php が存在せず /path/not/fallback.php が存在する場合、カレントディレクトリを /path/not に移動して fallback.php を実行します。
All versions of routing with dependencies
ext-ctype Version *