2011-12-30 11 views
2

軽量MVCフレームワーク用に独自のURLルータークラスを作成中です。私はシンプルな配列ベースのシステムを実装していて、一連のループなどを通したどこのパラメータを調べて、ジャンゴの本を見てきました。パターンが一致するシステムのように、クラスとメソッドを呼び出すとパターンが一致する。私はそれがうまく動作しているが、2つの異なるパターンをマッピングすることに固執しており、私は正規表現では最高ではないことを認めている。preg_match - regex - 名前付きサブパターンと同じ文字列で始まるパターンを区別する

ので、私は、URLパターンと対応するクラス/メソッドの配列があります:

'/^\/users\/(?P<username>\w+)$/' => array('class' => 'userController', 'method' => 'detailUserAction'), 

'/^\/users\/update$/' => array('class' => 'userController', 'method' => 'updateUserAction'), 

をし、最初のパターンはいつもと/ユーザー開始し、後に他の何かを持っている何か他のものの前にマッチしています。

後でコードで私は、配列をループして、このコードを実行しています:

if (preg_match($urlPattern, $pathString, $matches)){ 
       $this->invokeObject($command, $matches); 
       exit; 
      } 

私はこれらの2つのURLを区別するために使用することができますどのようなパターン上の任意のアイデア?

1は、私はいつもちょうど配列のために、最初の他のものを挙げることができますね/ユーザー/ユーザー名

であり、他は/ユーザで/

を更新し、私の最良の選択肢ということでしょうか?

+3

はい、特定のルータを最初に(/ users/updateのように)置き、すべてのルータを最後にキャッチします(/ users/usernameなど) – emaillenin

答えて

0

この場合、URIデザインを洗練されたものにする必要があります。ユーザーが「更新」、「追加」、または「削除」と呼ばれる場合はどうなりますか?これは、あなたのユーザ名パターンに特殊なケースを追加し、将来的に維持/拡張するのは容易ではありません。

しかし手段ユーザIDた場合、私はあなたがあいまいさを取り除くことができます(?P \ D +)にサブパターンを変更することができると思います。

+0

はこれを少し考えました。これは、URLパターンを定義するときに起きることからですか?私は私の自宅のアプローチを考えている、私はあなたのURLを更新のような任意の予約語と競合するユーザーまたは何かを登録しているとき何かが競合するかどうかを確認するために私のURLルーティングの配列を確認することができます。 –

関連する問題