1

文字列内のワイルドカードを読み取ることができる API 要求ハンドラーを作成しようとしています。理想はこんな感じです。

$myClass->httpGet('/account/[account_id]/list-prefs', function ($account_id) {
    // Do something with $account_id
});

[account_id]ワイルドカードはどこ?実際の URI は次のようになります。

http://api.example.com/account/123456/list-prefs

実際の機能は次のようになります...

function httpGet($resource, $callback) {
    $URI = urldecode(str_replace('/'.$this->API_VERSION, '', $_SERVER['REQUEST_URI']));
    $match = preg_match_all('/\[([a-zA-Z0-9_]+)\]/', $resource, $array);
    if ($resource /*matches with wildcards*/ $URI) {
        // Do something with it.
    }
    ...
}

私の問題は...

  1. コールバックを呼び出すために、関数内の文字列を URI と一致させる方法がわかりません。
  2. URI で指定された値を使用して文字列を解析する方法 ([account_id] を 123456 に置き換えます)。
4

1 に答える 1

1

次のようなものが欠けていると思います:

tokens = array('[account_id]' => '/\[([a-zA-Z0-9_]+)\]/');

それで:

function replaceTokens($resource) {
    # get uri with tokens replaced for actual regular expressions and return it
}

function httpGet($resource, $callback) {
    $URI = urldecode(str_replace('/'.$this->API_VERSION, '', $_SERVER['REQUEST_URI']));        
    $uriRegex = replaceTokens($resource);
    $match = preg_match_all($uriRegex, $URI, $array);
    if ($match) {
        // Do something with it.
    }
}
于 2012-12-11T19:56:49.530 に答える