/foo/bar のようなリクエストを受け取り、それを FooController->barAction(); に変換する単純なルーティング メカニズムを作成する必要があります。これらのコントローラー クラスとアクション メソッドを読み込むには、1 つのスクリプトをアクセス ポイントとして使用する必要があります。また、このタスクを実行するために外部のフレームワークやライブラリを使用することもできません。これは、Apache を使用する PHP 5.3 サーバーで実行できる必要があります。
以下は私がすでに書いたものですが、それを機能させるのに問題があります:
class Router {
private static $routes = array();
private function __construct() {}
private function __clone() {}
public static function route($pattern, $callback) {
$pattern = '/' . str_replace('/', '\/', $pattern) . '/';
self::$routes[$pattern] = $callback;
}
public static function execute() {
$url = $_SERVER['REQUEST_URI'];
$base = str_replace('\\', '/', dirname($_SERVER['SCRIPT_NAME']));
if (strpos($url, $base) === 0) {
$url = substr($url, strlen($base));
}
foreach (self::$routes as $pattern => $callback) {
if (preg_match($pattern, $url, $params)) {
array_shift($params);
return call_user_func_array($callback, array_values($params));
}
}
}
}
少なくとも別の単純なルーターに基づいた現在のスクリプトを実行しようとしていますが、実際に使用して出力を取得することはできません
Router::route('blog/(\w+)/(\d+)', function($category, $id){
print $category . ':' . $id;
});
Router::execute();