0

/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();
4

1 に答える 1

1

PATH を分割しようとする代わりに。代わりに .htaccess を使用しないでください。

したがって、次のような内部 URL を持つことができます。

index.php?module=MODULE&action=INDEX

次に、.htaccess を使用して URL にパスを提供し、それに応じてそれらをルーティングします。

www.mydomain.com/MODULE/INDEX

この投稿は、htaccess でプリティ URL を作成するための正規表現の書き換えに役立ちます。

もっと良いものがあるかもしれませんが、簡単なグーグル検索でした。

このようにして、次のようにアクセスできます。

$module = $_GET['module'];
$action = $_GET['action];

次に、ルーターの対応するアクションをチェックして、存在するかどうかを確認し、それに応じて再ルーティングできます。

于 2013-02-23T18:33:16.230 に答える