まず、すべてのリクエストを単一の PHP ファイルにリダイレクトする必要があります。その部分は、 Apache の.htaccessで行うか、他のサーバーの対応する部分です。
次に、 で表示できるデータを調べる必要があります$_SERVER
。を使用するのは非常に一般的$_SERVER['PATH_INFO']
ですが、選択はリクエストをどの程度正確に書き換えるかによって異なります。
次に、正規表現のリストを持ち、取得した URL フラグメントとの照合を試みるルーターを作成する必要があります。
いくつかのアイデアを提供するいくつかの例を次に示します。
'#^/(?P<page>[^/\\\\.,;?\n]+)$#'
'#^/user/(?P<id>[0-9]+)/(?P<nickname>[^/\.,;?\n]+)$#'
'#^(?:/test/(?P<parameter>[^/\\\\.,;?\n]+))?/mandatory$#'
これらの正規表現をより単純な表記法から生成するのが一般的な方法ですが、最初の反復ではあまり注目すべきではありません。
また、オプションのフラグメントを持つ式を使用する場合は、「フォールバック」値も提供する必要があります。これらの値は、フラグメントが指定されていない場合にデフォルトとして使用されますが、パターンは一致します。
私が行う方法は、PHP では次のようになります。
/*
* Routing mechanism
*/
$uri = isset( $_SERVER[ 'PATH_INFO' ] )
? $_SERVER[ 'PATH_INFO' ]
: '/';
$builder = new RequestBuilder;
$request = $builder->create();
$request->setUri( $uri );
$router = new Router( new RouteBuilder );
$router->import(
$reader->getAsArray( __DIR__ . '/config/routes.json' )
);
$router->route( $request );
この後、変数にはオブジェクトが含まれ、コマンドや など$request
のコマンドを使用して特定のパラメーターを照会できます。$id = $request->getParameter('id')
$controller = $request->getParameter('controller')
パターン自体を台無しにしない場合、抽出した値は、許可されていないファイルのインクルードに対して安全です。