1

私はPHPから提案された解決策を取りました:MVCルーティング機能が要求されたビューを解析するための良い解決策? 社内ガイドラインに合わせて調整しました (Supericy に感謝します)。

私は今、次のコードを持っています:

public function parseRequestedView($url) {

    $this->view_requested = explode('/', trim($url, '/'));

    // Format: [0] viewpoint, [1] child, [2] action (default: show), [3] reference
    $this->view_map = array(
        $this->parseViewMapArrayKey('device/:reference:/configurations') => array(0,  2, -1,  1),
        $this->parseViewMapArrayKey('device/:reference:')                => array(0, -1, -1,  1)
    );

    foreach ($this->view_map as $this->view_map_transitory => $this->view_map_indices) {

        if (preg_match($this->view_map_transitory, $url)) {

            foreach ($this->view_map_indices as $this->view_index) {

                $this->view_resources[] = $this->view_index > -1 ? $this->view_requested[$this->view_index] : null;

            }

            return $this->view_resources;

        }

    }

    return false;

}

public function parseViewMapArrayKey($key) {

    return '#'.str_replace([":reference:", ":string:"], ["\d+", ".+"], $key).'#';

}

1 つの小さな「問題」を除いて、正常に動作しています。

キー「device/:reference:」と「device/:reference:/configurations」を切り替えてから、device/:reference:/configurations のビューを呼び出すと、device/:reference の結果しか得られません。

たとえば、http ://ww.foo.com/device/123456/configurations は次のように出力されます。

Array
(
    [0] => device
    [1] => 
    [2] => 
    [3] => 123456
)

これはhttp://ww.foo.com/device/123456の結果です。キーを元の順序に戻すと、すべてが次のようになります。

Array
(
    [0] => device
    [1] => configurations
    [2] => 
    [3] => 123456
)

検索順序を逆にしたり、キーを切り替えたときに関数が正しい結果を出力するようにするにはどうすればよいですか?

このPHP Reverse Preg_matchを見つけました。しかし、私が知る限り、それは負の preg_match についてです。それとも私が間違っていますか?

前もって感謝します。

4

1 に答える 1

0

これはばかげた答えかもしれませんが、正規表現が? で始まり?^で終わるようにすることもできます。$

例えば

public function parseViewMapArrayKey($key) {

    return '#^'.str_replace([":reference:", ":string:"], ["\d+", ".+"], $key).'$#';

}
于 2012-12-25T12:13:52.363 に答える