ご想像のとおり、それを行う方法はたくさんあります。
たとえば、Slim Frameworkでは、ルーティング エンジンの例は次のようになります (パターンに基づく${OBJECT}->${REQUEST METHOD}(${PATTERM}, ${CALLBACK})
):
$app->get("/Home", function() {
print('Welcome to the home page');
}
$app->get('/Profile/:memberName', function($memberName) {
print( 'I\'m viewing ' . $memberName . '\'s profile.' );
}
$app->post('/ContactUs', function() {
print( 'This action will be fired only if a POST request will occure');
}
したがって、初期化されたインスタンス ( $app
) は、リクエスト メソッド (get、post、put、delete など) ごとにメソッドを取得し、最初のパラメーターとしてルートを取得し、2 番目のパラメーターとしてコールバックを取得します。
ルートはトークンを取得できます。トークンは、実行時に一部のデータ (メンバー名、記事 ID、組織の場所名など、すべてのルーティング コントローラーと同様) に基づいて変更される「変数」です。
個人的には、この方法は好きですが、高度なフレームワークに十分な柔軟性があるとは思いません。
私は現在 ZF と Yii を使用しているので、私が働いている会社のフレームワークの一部として作成したルーターの例があります。
ルート エンジンは正規表現 (@gradbot のものと同様) に基づいていますが、双方向の会話が行われるため、クライアントが mod_rewrite (Apache で) を実行できない場合や、サーバーに書き換えルールを追加できない場合は、従来の URL とクエリ文字列を引き続き使用できます。
ファイルには配列が含まれており、それぞれが次の例のようになっています。
$_FURLTEMPLATES['login'] = array(
'i' => array( // Input - how the router parse an incomming path into query string params
'pattern' => '@Members/Login/?@i',
'matches' => array( 'Application' => 'Members', 'Module' => 'Login' ),
),
'o' => array( // Output - how the router parse a query string into a route
'@Application=Members(&|&)Module=Login/?@' => 'Members/Login/'
)
);
次のような、より複雑な組み合わせを使用することもできます。
$_FURLTEMPLATES['article'] = array(
'i' => array(
'pattern' => '@CMS/Articles/([\d]+)/?@i',
'matches' => array( 'Application' => "CMS",
'Module' => 'Articles',
'Sector' => 'showArticle',
'ArticleID' => '$1' ),
),
'o' => array(
'@Application=CMS(&|&)Module=Articles(&|&)Sector=showArticle(&|&)ArticleID=([\d]+)@' => 'CMS/Articles/$4'
)
);
要するに、私が思うに、可能性は無限大です。それは、フレームワークをどれだけ複雑にしたいか、それを使って何をしたいかによって異なります。
たとえば、それが Web サービスまたは単純な Web サイト ラッパーであることを意図している場合は、Slim フレームワークの記述スタイルに従ってください。非常に簡単で見栄えの良いコードです。
ただし、それを使用して複雑なサイトを開発したい場合は、正規表現が解決策になると思います。
幸運を!:)