addGroup($base, function (FastRoute\RouteCollector $r) use($base) { // handlerに関数を指定する $r->get('/users', 'users'); // 単純なルーティング $r->get('/user/{id:\d+}', 'user'); // プレースフォルダ(名前:id) $r->get('/articles/{id:\d+}[/{title}]', 'articles'); // 任意のプレースフォルダ // handlerにクロージャを指定する $r->get('[/]', function() use($base) { header("Location: " . $base.'/users'); }); }); }; $dispatcher = FastRoute\simpleDispatcher($routes); // dispatch()に与えるHTTPメソッドとURIを取得 $httpMethod = $_SERVER['REQUEST_METHOD']; $uri = $_SERVER['REQUEST_URI']; // dispatch()の妨げになるのでURIの中のクエリパラメータを除去する // (クエリパラメータは、通常に$_GETで取得できる) if (false !== ($pos = strpos($uri, '?'))) { $uri = substr($uri, 0, $pos); } // URIの中にクエリパラメータがあるかもしれないのでデコードする // 例) /hoge/hoge/param/abc%20def $uri = rawurldecode($uri); // URIのディスパッチ $routeInfo = $dispatcher->dispatch($httpMethod, $uri); switch ($routeInfo[0]) { case FastRoute\Dispatcher::NOT_FOUND: // 404 Not Found break; case FastRoute\Dispatcher::METHOD_NOT_ALLOWED: $allowedMethods = $routeInfo[1]; // 許可されているメソッド // 405 Method Not Allowed break; case FastRoute\Dispatcher::FOUND: $handler = $routeInfo[1]; // ハンドラー 例)user $params = $routeInfo[2]; // パラメータハッシュ 例)['id'->123] // ハンドラーを呼び出す if (is_callable($handler)) { call_user_func_array($handler, $params); } break; } // Handler: users function users() { echo "users"; } // Handler: user function user(int $id) { echo "user({$id})"; } // Handler: articles function articles(int $id, string $title=null) { echo "articles({$id}){$title}"; }