2011-08-15 12 views
1

すべての場合をプログラミングしない構成構文を使用して、urlをClass-> Method()呼び出しに素早くルーティングする方法が必要です。urlを関数呼び出しにルーティングしてapi規則に一致させる

私はurlをとり、urlが参照するオブジェクトのクラス、使用するクラスメソッド、およびそのメソッドのパラメータを決定するWebツールを持っています。私は.htaccessを使用してindex.phpへのすべてのリクエストを流しています。したがって、$ _SERVER ['PATH_INFO']からそのパスを読み、フィルタリングして個々のコンポーネントを取得するために爆発させます。

だから、www.example.com/user/view/12345はユーザコントローラを作成し、ユーザプロファイルを表示するビュー機能を呼び出すでしょう。実際に、それは、次の操作を行います。

$url = explode("/",trim($_SERVER['PATH_INFO'],"/"); 
$class = $url[0] . "_Controller"; 
$page = new $class; 
echo call_user_func_array(array($page, $url[1]), $url); 

さて、これは当然の単純化され、そこここには示されていない他の可動部品の多くは、__autoload()、ページテンプレートシステムなどがありますが、あなたが得ますアイデア。 URLはドメイン名/クラス/関数/ [arg1]/[arg2]/[arg3]/...であり、コードはページをレンダリングするために必要なものを素早く決定することができます。

残念ながら、サイトはポリシーで定められたAPIルールに一致する必要があります。

DOMAIN_NAME /クラス/実体識別子/ function_alias/[引数1]/[arg2に]/[ARG3]/...その旨特定のエンティティ

ツールの場合:URLはどちらかであるべき政策をよりますドメイン名/クラス/関数_エリア/ [arg1]/[arg2]/[arg3]/...個々のエンティティに関連付けられていないツールの場合

私はこれを解決しましたが、 $ url [0]のクラスに対して$ url [1]の関数を呼び出して残りの引数を渡す代わりに、$ url [0]からオブジェクトクラスを決定し、それをインスタンス化してオブジェクトのroute($ url)メソッド。そこから、適切なクラスメソッドにURLを変換するスイッチとifステートメントの混乱した組み合わせがあります。

私が必要とするのは、URLがどのように表示されるかを定義できる設定ファイルやルーティングテーブルのようなものです。私はこの種のことをするCMSがあることを知っています。私は必要なもの

"user/$1"   => user/view/$1 
"user/add"   => user/add 
"user/$1/edit"  => user/edit/$1 
"user/$1/key/$2" => user/edit_key/$1/$2 

はすぐに、URLの実際のターゲットクラスとメソッドが何であるかを決定しますシンタックスとアルゴリズムである、それをインスタンス化し、必ずしもURLの値を渡します。

+0

は 'entityid'です_always_整数ですか? – Shad

答えて

1

おそらく、何らかの設定ファイルを読み込むルーティングクラスが存在しますが、簡単には見つかりませんでした。これらのいずれかが、あなたのニーズに合わせてください
PHP Application URL Routing
http://blog.sosedoff.com/2009/07/04/simpe-php-url-routing-controller/

:ここ

は、しかし、例のカップルです、あるいは純粋なPHPで比較的エレガントなソリューションを作成する人?

もちろん、これらのリダイレクトは純粋にApacheの書き換えで行うこともできます。

+0

私は何をしているのかちょっと複雑ですが、間違いなく正しい方向に向かいました。 –

関連する問題